1 / 6

파이프를 이용한 프로세스간 통신 파이프의 용량 초과시 다른 프로세스에 의해 자료가 읽혀져 파이프에 충분 한 공간이 마련될 때까지 수행이 중단

파이프를 이용한 프로세스간 통신 파이프의 용량 초과시 다른 프로세스에 의해 자료가 읽혀져 파이프에 충분 한 공간이 마련될 때까지 수행이 중단 예제 (unix_test1.c) – p215 파이프의 용량을 초과하는 자료를 한 번에 write 하면 , write 는 여러 단계로 수행되어야 한다 . 이때 여러 프로세스가 같은 파이프에 동시에 쓰지 않도록 주의할 것. 파이프를 이용한 프로세스간 통신 쓰기 전용 파일 기술자를 닫았을 때 ; - 자료를 쓰기 위해 해당 파이프를 개방한 다른 프로세스가 존재하면 OK

salene
Télécharger la présentation

파이프를 이용한 프로세스간 통신 파이프의 용량 초과시 다른 프로세스에 의해 자료가 읽혀져 파이프에 충분 한 공간이 마련될 때까지 수행이 중단

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 파이프를 이용한 프로세스간 통신 • 파이프의 용량 초과시 다른 프로세스에 의해 자료가 읽혀져 파이프에 충분 한 공간이 마련될 때까지 수행이 중단 • 예제 (unix_test1.c) – p215 • 파이프의 용량을 초과하는 자료를 한 번에 write하면, write는 여러 단계로 • 수행되어야 한다. 이때 여러 프로세스가 같은 파이프에 동시에 쓰지 않도록 주의할 것

  2. 파이프를 이용한 프로세스간 통신 • 쓰기 전용 파일 기술자를 닫았을 때; • -자료를 쓰기 위해 해당 파이프를 개방한 다른 프로세스가 존재하면 OK • -파이프가 비어있는 경우, 읽으려는 프로세스는 작업을 수행할 수 없음 • 읽기를 기다리며 잠들어 있는 프로세스를 깨우고 0 return • 읽기 전용 파일 기술자를 닫았을 때; • 자료를 읽기 위해 해당 파이프를 개방한 다른 프로세스가 존재하면 OK • 파이프로부터 자료를 읽어 들이는 프로세스가 없으면 그 파이프에 자료를 쓰기 위해 기다리던 프로세스들은 SIGPIPE 시그널을 받고 -1로 return

  3. 봉쇄되지 않은 read와 write • fstat 사용 • 여러 프로세스가 파이프로부터 자료를 읽어들이는 경우, fstat와 read • 사이에 다른 프로세스가 파이프로부터 자료를 읽을 수 있음 • O_NONBLOCK 사용 • fcntl(filedes, F_SETFL, O_NONBLOCK) • 파이프가 차있을 경우 write는 -1로 복귀, errorno를 EAGAIN으로 지정 • 파이프가 비어 있을 경우 read는 -1로 복귀, errorno를 EAGAIN으로 지정 • 예제 – unix_test2.c (p220)

  4. 파이프를 이용한 프로세스간 통신 • 실습 • - 부모는 1000개의 random number를 생성해서 자식에게 보낸다 • - 자식은 평균값을 계산해서 부모에게 보낸다 • - 부모는 평균 값을 출력한다

  5. 다수의 파이프를 취급하기 위한 select 사용 • 그림 7.4 • 부모 프로세스가 server로 동작, 자식 프로세스가 client로 동작 • - int select(int nfds, fd_set *readfds, fd_set *writefds, • fd_set *errorfds, struct timeval *timeout); • nfds : 서버가 잠재적 흥미를 가진 파일 기술자의 수 • readfds : 읽을 만한 가치가 있는가? • writefds : 쓰기를 받아 들일 준비가 되어 있는가? • errorfds : error가 발생했는가? • timeout = null (block), timeout = 0 (return), timeout > 0 (지정된 시간 후 return)

  6. 다수의 파이프를 취급하기 위한 select 사용 • 예제 (unix_test4.c) – p226 • (실습) • 두 child를 생성해서 각각 filename (data1, data2)를 parent에게 전송 • parent를 filename을 받아 open, read, 화면 출력을 실행

More Related