运行 需要输入但不挂起但仍允许输入的命令
run a command that needs input without hanging, but still allow input
我正在嵌入式 Linux 平台 (Intel Edison) 上用 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++ 程序,直到命令 returns,这不会 return 直到歌曲播放完毕。我可以通过在并行线程中使用 pthead
到 运行 命令来消除该问题,但这仍然不允许我根据需要输入命令。
我想也许可以通过某种方式 运行 在另一个 tty
中执行命令,然后通过将命令发送到另一个 tty
以某种方式将命令传递给 mpg123
,但我找不到办法做到这一点。 (我不确定是否可行)
我已经尝试这样做了几个小时,所以现在我准备在这里寻求帮助:)
你们有没有关于如何在不冻结线程(在 pthread 或其他什么中)的情况下 运行 命令,并且仍然能够向 mpg123
发送命令的想法?
听起来您可能想要使用 mpg123 的 FIFO 模式。您设置要使用的路径名,将 mpg123 指向它,然后将您的命令回显到其中。
这个answer有一个很好的例子
FIFO_MPG='/srv/http/newsctl'
mpg123 -R --fifo "$FIFO_MPG"
echo 'load filename.mp3' >> "$FIFO_MPG"
我正在嵌入式 Linux 平台 (Intel Edison) 上用 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++ 程序,直到命令 returns,这不会 return 直到歌曲播放完毕。我可以通过在并行线程中使用 pthead
到 运行 命令来消除该问题,但这仍然不允许我根据需要输入命令。
我想也许可以通过某种方式 运行 在另一个 tty
中执行命令,然后通过将命令发送到另一个 tty
以某种方式将命令传递给 mpg123
,但我找不到办法做到这一点。 (我不确定是否可行)
我已经尝试这样做了几个小时,所以现在我准备在这里寻求帮助:)
你们有没有关于如何在不冻结线程(在 pthread 或其他什么中)的情况下 运行 命令,并且仍然能够向 mpg123
发送命令的想法?
听起来您可能想要使用 mpg123 的 FIFO 模式。您设置要使用的路径名,将 mpg123 指向它,然后将您的命令回显到其中。
这个answer有一个很好的例子
FIFO_MPG='/srv/http/newsctl'
mpg123 -R --fifo "$FIFO_MPG"
echo 'load filename.mp3' >> "$FIFO_MPG"