계속 C.포크 아이들이
아래의 코드에 대한 fork()
및 pipe()
을 학습하기 전에 파이프에 쓰기를 기다리는 것은 파이프와 자식 프로세스를 생성한다. 자식이 메시지를 보내고 부모가 메시지를 읽습니다.
int main() {
int fd[2];
pid_t pid;
pipe(fd);
pid = fork();
if (pid == 0) {
// Child
close(fd[0]);
write(fd[1], "HELLO", (strlen("HELLO")+1));
exit(0);
}else{
// Parent
close(fd[1]);
char buffer[80];
read(fd[0], buffer, sizeof(buffer));
printf("Received string: %s", buffer);
}
return 0;
}
괜찮습니다. write
행에 댓글을 달면 부모는 이상한 문자가있는 문자열을 받았음을보고합니다. 이는 내 프로그램과 관련이없는 메모리를 읽고 있기 때문에 정상적인 것 같습니다.
하지만,이 질문에 제공합니다 :되어 있지 그것은 가능한 부모가 데이터를 기록 할 수 아이 전에 파이프 을 읽을? 그것이 일어난다면 이상한 인물을 읽는 것입니다.
부모가 자식으로부터 데이터를 쓰려면 "대기"할 수 있습니까?
미래에는 여러 가지 하위 프로세스가있을 수 있으며 계속 진행하기 전에 부모가 모든 어린이가 작업을 마치면 "대기"할 수 있기를 바랍니다. 당신이 기록 라인을 코멘트 경우
에 의해 반환 된 값을 확인을 * * 모든 ** 해당 시스템 호출. 맹목적으로 읽지 않은 물건을 읽었으므로 쓰레기가 보입니다. – Mat
@Mat : 시스템 호출은 무엇입니까? 'fork()'와'pipe()'를 의미합니까? – Voldemort
... 그리고'read'와'write'.모든 것들은 실패 할 수 있고, 심지어 그들이하지 않을 때에도 반환 된 정보는 일반적으로 올바른 프로그램을 만들기 위해 필요합니다. (일반적으로 실패한 '닫기'에 대해 할 수있는 일은 많지 않지만 실패 할 수도 있습니다.) – Mat