gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:26:31 24 4
gpt4 key购买 nike

我正在嵌入式 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++ 程序直到命令返回,直到歌曲播放完毕才会返回。我可以使用 pthead 消除该问题在并行线程中运行命令,但这仍然不允许我根据需要输入命令。

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

我已经尝试这样做了几个小时,所以现在我准备在这里寻求帮助 :)

你们有没有想过如何在不卡住线程的情况下运行命令(在 pthread 或其他什么中),并且仍然能够将命令发送到 mpg123

最佳答案

听起来您可能想要使用 mpg123 的 FIFO 模式。您设置要使用的路径名,将 mpg123 指向它,然后将您的命令回显到其中。

answer有一个很好的例子

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

关于c++ - 运行一个需要输入而不挂起的命令,但仍然允许输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35781991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com