파이프를 통해 통신하기 위해 2 개의 프로세스를 만들려고합니다. 아이가 파이프에 글자를 쓸 때까지 기다렸다가 부모는 파이프에서 글자를 읽고 화면에 표시합니다. 문제는 필자가 파이프에 문자를 성공적으로 쓰는 것입니다. (필자는 즉시 테스트를 수행하여 파이프에 있음을 확인했습니다.)하지만 파이프에서 부모가 읽을 때 아무 것도 없습니다. 나는 이유를 정말로 이해하지 못한다. 모든 것이 잘 보입니다.예기치 않은 pipe() 동작
int PID, canal[2];
if(-1 == (PID = fork()))
{
perror("Error");
return 0;
}
if(-1 == pipe(canal))
{
perror("Error");
return 0;
}
if(PID == 0)
{
close(canal[0]);
printf("Child\n");
char buffer = 'C';
if(0 == write(canal[1], &buffer, sizeof(char)))
printf("Didn't write anything\n");
close(canal[1]);
}
else
{
char readBuffer;
wait(NULL);
printf("Parent\n");
close(canal[1]);
if(read(canal[0], &readBuffer, sizeof(char)))
{
printf("I read: ");
printf("%c\n", readBuffer);
}
close(canal[0]);
}
제발, (이 코드는 실행 프로그램에 대한 질문을 할 때) 실제 입력을 게시하고, 게시 된 코드가 전체 프로그램이 아니며 확실히 컴파일되지 않는 게시물 코드를 게시하십시오. 예상 출력, 실제 출력 게시. – user3629249
'write()'함수는 -1을 반환 할 수 있습니다. 이 경우 오류가 발생했습니다. -1을 체크하고'perror()'를 호출해야한다. 반환 값이 0 일 때 나머지 데이터를 시도하고 출력하기 위해 반복해야한다. 성공한 경우, 쓰여진 바이트 수가 반환됩니다 (0은 이 쓰이지 않음을 나타냄). *이 숫자가 숫자보다 작 으면 * 오류가 아닙니다. 요청 된 바이트 수 (예 : 디스크 장치가 채워 졌기 때문에 발생할 수 있습니다.) NOTES도 참조하십시오. " – user3629249
자식 프로세스는 'if'코드 블록의 끝에서 실행되지 않고'exit()'를 호출해야합니다 (즉, 자식이'else'코드 블록의 끝에서 아무것도 실행하지 않는다는 것을 의미합니다. – user3629249