运行需要输入而不挂起的命令,但仍允许输入
run a command that needs input without hanging, but still allow input
我正在嵌入式Linux平台(Intel Edison)上用C++制作一个基本的音乐播放器。
它的工作原理是向 shell 发送命令以使用 mpg123
播放音乐。
播放音乐工作正常,但现在我需要添加媒体控件。 我正在使用 mpg123
命令播放我的 MP3 文件,如果您将 -C
标志传递给它,那么它会侦听命令,例如 p
暂停、q
退出等命令
我正在使用另一个 SO 答案中的代码来执行命令如何使用 POSIX 执行命令并在C++内获取命令输出?
现在的问题是,当我运行命令以播放来自c ++的所选歌曲时(例如。 mpg123 -C /media/sdcard/Music/<songname>
) 它会挂起 C++ 程序,直到命令返回,直到歌曲播放完毕才会返回。我可以通过使用 pthead
在并行线程中运行命令来消除该问题,但这仍然不允许我根据需要输入命令。
我想也许以某种方式在另一个tty
运行命令,然后以某种方式通过将命令发送到另一个tty
来将命令传递给mpg123
,但我找不到一种方法来做到这一点。(我不确定这是否可能)
我已经尝试这样做了几个小时,所以现在我准备在这里寻求一些帮助:)
你们中是否有人对如何在不冻结线程的情况下运行命令(在 pthread 或其他什么中)有任何想法,并且仍然能够向mpg123
发送命令?
听起来
你会想要使用mpg123的FIFO模式。 您设置要使用的路径名,将 mpg123 指向它,然后将您的命令回显到其中。
这个答案有一个很好的例子
FIFO_MPG='/srv/http/newsctl'
mpg123 -R --fifo "$FIFO_MPG"
echo 'load filename.mp3' >> "$FIFO_MPG"
相关文章:
- 为什么在代码块中执行时会跳过输入用户输入的行?
- 如果用户输入的输入大于 char 数组,则 cin.getline 会跳过输入提醒
- C++循环:如何让程序在用户输入无效输入时多次重复"error"消息
- 从输入 1 查找输入 2 中字符的位置
- 如何从用户那里获取单个字符,直到他输入"."或输入
- 在C 中遇到了如何从用户输入直到输入的整数输入
- 重载输入 重载输入派生类中的基类
- 有人可以向我解释一下这段代码是如何工作的吗?(程序在预期数值且用户输入其他输入时再次要求用户输入)
- 如何识别输入的输入字符串在 c++ 中是两个还是多个单词
- 输入数字输入到if语句中
- 查找我的算法的运行时间,以查找输入在输入方面是否是素数
- C++数字输入的输入验证
- 从标准输入和输入值中读取整数到向量
- 如何重载模板类<< cout? 轨道结帐表单/视图:用户输入>查看输入>结帐
- 为什么在为数组输入并输入合并排序函数后出现运行时错误
- 从标准输入读取输入,并准备接收来自服务器的广播
- cin 不接受输入作为输入
- 数字输入的输入验证
- 永远没有机会输入字符串输入.C++
- 检查QT输入的输入