我正在使用Linux和C/C++。我写了一个带有一些线程(#include pthread.h)的程序,并使用sudo运行它。
其中一个线程运行一个进程(mplayer),通过添加“&”使其保持运行状态,以便system()可以迅速返回。
我也尝试了另一种方法... 我使用具有写权限的popen()。 我尝试使用fprintf发送命令,但mplayer似乎也没有收到任何东西。
如果需要更多代码,请告诉我。
任何提示都将不胜感激。谢谢。
其中一个线程运行一个进程(mplayer),通过添加“&”使其保持运行状态,以便system()可以迅速返回。
system("mplayer -loop 0 /mnt/usb/* &");
Mplayer进程正常运行,并按预期播放音乐。
之后,我通过运行pidof获取其进程ID。假设它返回2449.使用posix互斥锁在此线程和第二个线程上写入/读取该进程ID。
在第二个线程中,我尝试使用/proc/2449/fd/0管道(它被称为管道还是流?)向mplayer写入数据:
system("echo \">\" > /proc/2499/fd/0");
system()返回0,但mplayer进程没有得到任何东西。">"命令应该播放下一首曲目。
stdin流被其他进程继承了吗?
2449进程下列出了几个fd,除了0之外,它们中的一个是stdin流吗?
root@pisanlink:/proc# cd 2499
root@pisanlink:/proc/2499# cd fd
root@pisanlink:/proc/2499/fd# ls
0 1 2 3 4 5 7
root@pisanlink:/proc/2499/fd#
我也尝试了另一种方法... 我使用具有写权限的popen()。 我尝试使用fprintf发送命令,但mplayer似乎也没有收到任何东西。
如果需要更多代码,请告诉我。
任何提示都将不胜感激。谢谢。
man 3 popen
可能更符合你的整体目标。在echo
上使用system()似乎特别绕行。 - undefinedpopen
函数时,你需要将FILE
设定为行缓冲模式或无缓冲模式(参见:setvbuf
),或者在向其中打印命令后调用fflush
。 - undefined