fork() 및 pipe()에 대한 이해를 돕기 위해 노력하고 있습니다. pipe()는 두 프로세스간에 데이터를 전송하는 단방향 방법이라는 것을 알고 있습니다. 상위 프로세스에서 두 개의 정수 배열에 대해 pipe()를 호출 한 다음 fork하면 데이터를 양방향으로 전송할 수있는 두 개의 파이프가 효과적으로 생성됩니까? (부모가 표준에서 읽었고 자식이 표준 출력에 글을 쓰거나 유사하게 표준 출력에 부모 쓰기를하고 표준에서 읽은 자식을 표준에서 읽도록 하시겠습니까?)C : pipe() and fork()
0
A
답변
5
아니요. pipe()
을 한 번 호출하면 항상 파이프가 하나만 있습니다. 그러나, fork()
이하는 일은 파일 설명자 테이블을 포함한 모든 것을 자식 프로세스에 복사한다는 것입니다. 따라서 부모와 자식 모두 파이프의 두 끝에 만 액세스 할 수 있습니다. 그렇기 때문에 학부모와 자녀의 사용하지 않는 쪽을 닫아야합니다. 즉 부모에게 글을 쓰고 어린이에게 읽으려는 경우 상위에 fd[0]
, 자녀에 fd[1]
을 닫아야합니다. 파이프! 진짜 파이프라고 생각해보십시오. 물이 파이프 양끝에 쏟아지면 어떻게 될까요?
4
대답은 "아니오"입니다. fork()
의 결과는 pipe()
에 의해 반환 된 각 설명자가 복제 됨 (즉, dup()
과 같음)이지만 파이프 자체는 부모와 자식 모두에 대해 동일한 파이프입니다. 파이프의 쓰기 끝 부분에 쓰면 읽기 끝에서 데이터를 사용할 수 있지만 부모와 자식의 읽기 끝은 동일합니다.
양방향 통신이 필요한 경우 pipe()
을 두 번 호출 할 수 있습니다. 또는 socketpair()
을 호출하여 양방향 통신을 지원하는 소켓 쌍을 만들 수 있습니다.
관련 문제
- 1. C pipe() and fork()
- 2. dup2, pipe and fork in C
- 3. Fork + Pipe 문제
- 4. fork() 및 pipe()가있는 C 병렬 서버
- 5. C - WHILE fork()/pipe() 내부 루프
- 6. fork/pipe/close 재귀 함수
- 7. fork() 및 pipe()를 사용하는 IPC
- 8. 리눅스에서 fork()를 fork() 한 프로세스에서 pipe()를 호출하기
- 9. fork() 및 pipe()에 대한 사소한 문제
- 10. pipe, fork, dup2와 관련된 문제가 있습니다.
- 11. C++ fork/std :: thread and boost :: timed_join
- 12. Fork and Execlp
- 13. fork() and printf()
- 14. fork() and linux에서 kill
- 15. C Unix Pipe 예
- 16. JDK6에서 fork-and-join 사용
- 17. Pipe, Fork, Exec - 부모 프로세스와 자식 프로세스 사이의 양방향 통신
- 18. fork() pipe() dup2는 외부 자식 프로세스와 comunicate하지 않습니다.
- 19. C : "write : Broken pipe"오류가 발생했습니다.
- 20. 커맨드 벡터에서 C++ fork exec
- 21. C++ fork() 및 주소 공간
- 22. c - fork() 코드
- 23. C 프로세스 fork()
- 24. fork() - C 프로그래밍
- 25. C : fork() 자식 프로세스
- 26. C fork(), wait4() 문제
- 27. C 유닉스 - fork(), execl()과 파이프를 루프에 넣는다
- 28. pipe-and-filters 패러다임을위한 오픈 소스 java/c/C++ 프레임 워크가 있습니까?
- 29. pipe() 함수가있는 간단한 셸
- 30. fork() 내의 fork()
몇 가지 코드를 작성하고 사용해보십시오. 그러면 좀 덜 일반적인 질문을 할 수 있는데, 대답하기가 더 쉽습니다. – vanza