运行一个需要输入而不挂起的命令,但仍允许输入

时间:2016-03-03 20:07:37

标签: c++ linux multithreading media-player intel-edison

我在嵌入式Linux平台(英特尔爱迪生)上用C ++制作基本的音乐播放器。

它的工作原理是向shell发送命令以使用mpg123播放音乐。

播放音乐工作正常,但现在我需要添加媒体控件。我使用mpg123命令播放我的MP3文件,如果你传递了-C标志,那么它会监听p等暂停命令,q退出等等

我使用其他SO答案中的代码执行命令How to execute a command and get output of command within C++ using POSIX?

现在的问题是,当我运行命令从c ++(例如mpg123 -C /media/sdcard/Music/<songname>)播放所选歌曲时,它会挂起c ++程序,直到命令返回,这不会返回,直到歌曲为止做完了。我可以通过使用pthead在并行线程中运行命令来消除该问题,但仍然不允许我根据需要输入命令。

我想到可能以某种方式在另一个tty中运行该命令,然后通过将命令发送到另一个mpg123以某种方式将命令传递给tty,但我无法找到这样做的方式。 (而且我不确定它是否可能)

我一直试图这样做几个小时,所以现在我准备在这里寻求帮助:)

你们是否有任何想法如何在不冻结线程的情况下运行命令(在pthread或其他任何方面),并且仍然能够向mpg123发送命令?

1 个答案:

答案 0 :(得分:2)

听起来你会想要使用mpg123的FIFO模式。设置要使用的路径名,在其上指向mpg123,然后将命令回显到其中。

这个J.F. Sebastian's answer有一个很好的例子

FIFO_MPG='/srv/http/newsctl'
mpg123 -R --fifo "$FIFO_MPG"
echo 'load filename.mp3' >> "$FIFO_MPG"