C 双向管道通信。不能从孩子身上花钱
我无法让这种基本的交流发挥作用。 我只想通过孩子的标准输出将信息发送到父母的文件描述符。 我有seg故障C 双向管道通信。不能从孩子身上花钱,c,fork,C,Fork,我无法让这种基本的交流发挥作用。 我只想通过孩子的标准输出将信息发送到父母的文件描述符。 我有seg故障 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #define READ 0 #define WRITE 1 int main(void){ int fdRead[2]; int pid, i, num; FILE* output; char mystring [100]
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define READ 0
#define WRITE 1
int main(void){
int fdRead[2];
int pid, i, num;
FILE* output;
char mystring [100];
char c;
pid = fork();
if(pid){
FILE * read;
close(fdRead[WRITE]);
read = fdopen(fdRead[READ], "r");
fgets(mystring,100, read);
printf("parent %d",mystring );
} else {
/* child */
dup2(fdRead[WRITE], STDOUT_FILENO);
close(fdRead[READ]);
close(fdRead[WRITE]);
printf("child" );
}
exit(0);
}您的代码对管道没有任何作用。 使用管道在父进程和子进程之间进行通信的代码如下
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define READ 0
#define WRITE 1
int main(void){
int pipefd[2];
pid_t pid;
int i, num;
if (pipe(pipefd)<0) { /* create pipe */
perror("pipe");
exit(-1);
}
char mystring [100];
char c;
pid = fork();
if(pid<0){
perror("fork");
exit(-1);
} else if (pid=1) { /* parent */
char *mystring = "message to child";
write(pipefd[WRITE],mystring,strlen(mystring);
sleep(1); /* wait for child read message */
char buf[128]; /* buffer to receive data from child */
read(pipefd[READ],buf, sizeof buf);
close(pipefd[READ]);
close(pipefd[WRITE]);
printf("Returned from child %s",buf );
return 0;
} else { /* child */
char *s="send from child: ";
char buf[128];
read(pipefd[READ],buf, sizeof buf);
write(pipefd[WRITE],s,strlen(s));
close(pipefd[READ]);
close(pipefd[WRITE]);
return 0;
}
}
尝试在启用警告的情况下编译-Wall-Wextra for gcc和clang。首先修复您收到的警告。与使用未初始化的数组类似。出现段错误的原因是read=fdopenfdRead[read],r;read为NULL,它在fgetsmystring,100,read;,处转储,在fget之前检查一下。如果有一个coredump,使用gdb调试它,并且在操作fdRead之前不创建管道