我有两个并行运行的进程。我希望父母将一些字符发送给孩子。我想使用pipe()并从父级写入并将信号发送给子级,然后从子级检查信号是否已发送并在子级进程中读取char。我该怎么办?
int run() {
pid_t pid;
int filds[2];
pipe(filds);
char *args[150] = {"./draw.out", NULL}; // child will run executable.
char buff = '\0';
if ((pid = fork()) < 0) { // fork a child process/
printf("*** ERROR: forking child process failed\n");
exit(1);
} else if (pid == 0) {
execvp(args[0], args); // run program from the child process.
} else { // for the parent
char btnPressed = getch();
while (btnPressed != 'q'){
btnPressed = getch(); // gets the char
write(filds[1],buff, BUFF_SIZE); //write to the pipe.
// how do i send safe signal to child?
}
}
}
答案 0 :(得分:0)
首先,您不能同时使用execvp和管道。由于execvp将子进程替换为另一个可执行文件。这意味着父进程和子进程不再共享管道,因为execvp创建的新进程具有不同的堆栈。
您可以在共享内存上传递数据,并向孩子发送信号。孩子读取数据后,它还可以发送信号以表明我已收到数据。