0
나는이 기본적인 의사 소통을 할 수 없다. 내가 원하는 것은 아이의 표준 출력을 통해 부모 파일 기술자에게 정보를 보낸다. 나는 seg fault를 얻고있다.양방향 파이프 통신. 자제 할 수 없다.
#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);
}
이 활성화 경고와 함께 컴파일하려고 다음과 같이 파이프를 사용하여 부모와 자식 프로세스 사이의 통신을위한 코드 (* GCC *와 * 그 소리 *에 대한'-Wall -Wextra') 보인다. 먼저 경고를 수정하십시오. 초기화되지 않은 배열을 사용하는 것과 같습니다. – hyde
세그먼트 결함이 발생하는 이유는'read = fdopen (fdRead [READ], "r"); ''read'는'NULL'이고'fgets (mystring, 100, read)'에 cfallump되어'fget' 전에 검사합니다. 코어 덤프가있는 경우 gdb를 사용하여 코어 덤프를 디버깅하십시오. –
그리고'fdRead'를 실행하기 전에 파이프를 생성하지 마십시오. –