我正在尝试在我的树莓派上为 omxplayer 编写远程控制程序
我可以让 omxplayer 在子进程中正常运行,但我似乎无法让管道正常工作以实际向子进程发送命令。
int fd_pipe[2];
pipe (fd_pipe);
while(1) { // main accept() loop
printf("server: got connection from %s\n", s);
/* Attempt to fork and check for errors */
if( (pid=fork()) == -1){
fprintf(stderr,"Fork error. Exiting.\n"); /* something went wrong */
exit(1);
}
if (pid==0)
{ // this is the child process
dup2(0, fd_pipe[0]);
close(fd_pipe[1]);
if(execl("/usr/bin/top","top",NULL) == -1){
fprintf(stderr,"execl Error!");
exit(1);
}
//try and send command here
write(fd_pipe[0], "q", 1);
exit(0);
} else {
close(new_fd); // parent doesn't need this
dup2(1, fd_pipe[1]);
//try and send here too
write(fd_pipe[0], "q", 1);
}
}
当我使用 top 进行测试并运行程序时,我可以看到 top 输出出现在终端窗口中,并且我可以在窗口中看到 q 命令,但它看起来像是进入父进程而不是子进程。我是在管道上做错了什么,还是无法向生成的子进程发送命令?
我尝试将子 dup2 语句更改为从管道复制到标准输入
{ // this is the child process
dup2(fd_pipe[0], 0);
但随后 top 无法以失败的 tty get 消息开始