запустить команду, которая требует ввода без зависания, но все же разрешить ввод

Я делаю основной музыкальный проигрыватель на C ++ на встроенной платформе Linux (Intel Edison).

Он работает путем отправки команд в оболочку для воспроизведения музыки с помощью mpg123,

Воспроизведение музыки работает нормально, но теперь мне нужно добавить средства управления медиа. Я использую mpg123 команда для воспроизведения моих файлов MP3, и если вы передаете его -C флаг, то он слушает такие команды, как p для паузы, q для выхода и т. д.

Я использую код из этого другого ответа SO для выполнения команд Как выполнить команду и получить вывод команды в C ++, используя POSIX?

Теперь дело в том, когда я запускаю команду для воспроизведения выбранной песни из c ++ (например, mpg123 -C /media/sdcard/Music/<songname>) она вешает программу на с ++ до тех пор, пока не вернется команда, которая не вернется, пока не закончится воспроизведение песни. Я могу устранить эту проблему с помощью pthead выполнить команду в параллельном потоке, но это все еще не позволяет мне вводить команды так, как мне нужно.

Я подумал, может быть, как-то запустить команду в другом ttyи затем как-то передавая команды mpg123 отправив их другому tty, но я не смог найти способ сделать это. (и я не уверен, что это возможно)

Я пытался делать это часами, так что теперь я готов попросить здесь о помощи 🙂

У кого-нибудь из вас есть какие-либо идеи о том, как запустить команду без замораживания потока (в pthread или как-то еще), и при этом иметь возможность отправлять команды mpg123?

0

Решение

Похоже, вы захотите использовать режим FIFO в mpg123. Вы устанавливаете путь, который будет использоваться, наведите на него mpg123 и затем введите в него ваши команды.

это ответ имеет отличный пример

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]