我可以使用标准输入进行进程间通信吗?我编写了以下gnu c代码作为实验,但程序在打印定义为val
的字符后挂起等待输入。发送过程中的换行符和fflush
似乎都没有解决问题。
#include <unistd.h>
#include <stdio.h>
int main(void) {
char val = '!';
int proc = fork();
if (proc < 0)
return -1;
if (proc == 0) {
write(0, &val, 1);
return 0;
}
else {
char ch[2] = { 0 };
read(0, ch, 1);
printf("%s\n", ch);
return 0;
}
return -2;
}
答案 0 :(得分:1)
您可以使用管道进行IPC。现在,如果你想使用STDIN_FILENO和STDOUT_FILENO,它将如下所示:
#include <unistd.h>
#include <stdio.h>
int main(void) {
char val = '!';
int filedes[2];
pipe(filedes);
int proc = fork();
if (proc < 0)
return -1;
if (proc == 0) {
close(1);
dup(filedes[1]);
close(filedes[0]);
close(filedes[1]);
write(1, &val, 1);
return 0;
}
else {
char ch[2] = { 0 };
close(0);
dup(filedes[0]);
close(filedes[0]);
close(filedes[1]);
read(0, ch, 1);
printf("%s\n", ch);
return 0;
}
return -2;
}
组合close(x)和dup(filedes [x])关闭STDOUT / STDIN将filedes [x]的副本复制到第一个可用描述符中,即刚刚关闭的内容。正如Jonathan所建议的那样,现在关闭两个文件的结尾,毫无疑问是使用STDIN / STDOUT。