代码之家  ›  专栏  ›  技术社区  ›  Keith M

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

  •  0
  • Keith M  · 技术社区  · 10 年前

    我正在嵌入式Linux平台(Intel Edison)上用C++制作一个基本的音乐播放器。

    它通过向外壳发送命令来播放音乐 mpg123 .

    播放音乐很好,但现在我需要添加媒体控件。我正在使用 每加仑123 命令播放我的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 ,然后以某种方式将命令传递给 每加仑123 通过将它们发送给另一个 tty公司 ,但我找不到办法。(我不确定是否可行)

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

    对于如何在不冻结线程的情况下运行命令(在pthread或其他线程中),并且仍然能够将命令发送到 每加仑123 ?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

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

    answer 有一个很好的例子

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