• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

pipe 실습 질문

21.08.26 20:06 작성 조회수 166

0

안녕하세요. 강의 감사히 잘 듣고 있습니다.

pipe 실습 부분에서 이해가 안 가는 부분이 있습니다.

write에서 fd[1]에 썼고 read에서 fd[0]에서 읽어옵니다.

그런데, fd라는 배열은 내부적으로 정의된 것이 아니라 main 시작부에서 int fd[2]로 선언한 배열입니다.

질문1. fd가 pipe로서 사용되는 것을 따로 명시하지 않았는데 (그냥 main 시작부에서 선언했을 뿐인데) 어떻게 pipe로서 사용되는 것인가요? 
혹, write(), read() 내부적으로 첫번째 파라미터를 pipe로 사용한다는 구현이 되어있는 것인가요?

질문2. 쓰는 위치는 fd[1]이라고 write의 첫번째 파라미터로 정해줍니다.
read의 첫번째 파라미터는 "어디에서 읽어올지"가 아니라 "읽어온 것을 어디에 저장할지"입니다.
어디에서 읽어올지는 따로 명시하지 않아도 되는 것인가요?
그냥 단순하게 "fd는 pipe니까 알아서 fd[1]에서 읽어올 것이다."정도로 받아들이고 넘어가도 괜찮은가요?

강의 덕분에 운영체제 공부를 수월하게 이어나가고 있습니다. 좋은 강의 만들어주셔서 감사합니다.

답변 1

답변을 작성해보세요.

1

안녕하세요? 충분히 헷갈린만한 부분을 질문해 주셨네요.

본 강의는 개념을 주로 다루기 때문에, Unix/Linux의 pipe() 함수가

어떻게 동작하는지 충분한 설명을 할 수 없어서 헷갈리기도 할 것 같습니다.

https://en.wikipedia.org/wiki/Pipeline_(Unix)

위 주소에서 파이프라인의 개념을 이해하신 후에 

pipe() 시스템 콜에 대해서 찾아보시면 될 것 같습니다.

아래 주소를 한 번 참고해 보세요.

https://www.geeksforgeeks.org/pipe-system-call/

임현강님의 프로필

임현강

질문자

2021.09.02

감사합니다 교수님 ^^