몇 가지 하위 프로세스와 양방향 통신이 필요한 응용 프로그램을 작성 중입니다. 부모님은 지속적으로 stdin에서 단어를 읽는 쿼리 엔진과 같아서 각 하위 프로세스에 전달합니다. 하위 프로세스는 처리를 수행하고 독점 파이프에서 상위 프로세스로 다시 씁니다.C 포크 및 파이프 닫는 끝
이것은 이론적으로 어떻게 작동해야하지만 구현 세부 사항에 머물러 있습니다. 첫 번째 문제는 아이를 분기하기 전에 2 개의 파이프를 만드는 것입니까? 포크를 할 때 부모가 파일 설명자를 상속받을 것이라는 것을 알고 있습니다. 이는 4 개의 파이프가 생성되거나 2 개의 파이프가 복제되었음을 의미합니다. 만약 그들이 자식에서 중복된다면, 이는 내가 자식에서 파일 기술자를 닫을 경우, 부모의 파일 기술자를 닫을 수도 있다는 것을 의미합니까?
내 이론은 다음과 같으며 간단히 설명이 필요하며 올바른 경로에 올려야합니다. 이것은 테스트되지 않은 코드입니다. 방금 제가 생각한 것에 대한 아이디어를주기 위해 썼습니다. 고마워, 어떤 도움을 주셔서 감사합니다.
int main(void){
int fd[2][2]; //2 pipes for in/out
//make the pipes
pipe(fd[0]); //WRITING pipe
pipe(fd[1]); //READING pipe
if(fork() == 0){
//child
//close some ends
close(fd[0][1]); //close the WRITING pipe write end
close(fd[1][0]); //close the READING pipe read end
//start the worker which will read from the WRITING pipe
//and write back to the READING pipe
start_worker(fd[0][0], fd[1][1]);
}else{
//parent
//close the reading end of the WRITING pipe
close(fd[0][0]);
//close the writing end of the READING pipe
close(fd[1][1]);
//write data to the child down the WRITING pipe
write(fd[0][1], "hello\n", 6);
//read from the READING pipe
int nbytes;
char word[MAX];
while ((nbytes = read(fd[1][0], word, MAXWORD)) > 0){
printf("Data from child is: %s\n", word);
}
}
}
오른쪽이 조금 깔끔 해지면 부모와 자녀 모두에서 올바른 파일 설명자를 닫을 수 있음을 명확히 할 수 있습니까? – 1337holiday
예, 적어도 처음에는 제대로 보입니다. 그것을 실행하는 데 문제가 있습니까? –