【发布时间】:2014-09-16 11:03:07
【问题描述】:
我正在尝试让父母使用 2 个文件描述符将信息发送给孩子,并让孩子将其发回。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define READ 0
#define WRITE 1
int main(void) {
int fdWrite[2];
int fdRead[2];
int pid, i, num;
FILE* output;
if (pipe(fdRead) == -1) {
perror("Can't create pipe");
exit(1);
}
if (pipe(fdWrite) == -1) {
perror("Can't create pipe");
exit(1);
}
char mystring[100] = { 0 };
char c;
pid = fork();
if (pid) {
FILE * read;
FILE * write;
close(fdRead[WRITE]);
close(fdWrite[READ]);
write = fdopen(fdWrite[WRITE], "w");
fprintf(write, "parent %s\n", "jeronimooo...");
read = fdopen(fdRead[READ], "r");
fgets(mystring, 100, read);
fprintf(stdout, "%s\n", mystring);
} else {
/* child */
dup2(fdRead[WRITE], STDOUT_FILENO);
close(fdRead[READ]);
close(fdRead[WRITE]);
dup2(fdWrite[READ], STDIN_FILENO);
close(fdWrite[READ]);
close(fdWrite[WRITE]);
fgets(mystring, 100, stdin);
fprintf(stdout, "child %s\n", mystring);
}
exit(0);
}
我正在尝试做的事情:
- 写入父文件描述符,由其接收描述符读取。
- 然后在另一个描述符中,将信息从子级发送到其父级中的接收描述符。
目前正在挂起:fgets(mystring,100, read)。
【问题讨论】:
-
挂在 which
fgets电话上?有两个。 -
另外,我不知道
fdopen使用什么缓冲模式,你可能想检查一下,它不是完全缓冲的。写完试试fflush? -
@JoachimPileborg,谢谢!你能解释一下为什么 fflush 有效吗?
标签: c fork pipe parent-child