파이프와 exec 시스템 호출 (ls | wc) dup2(filedes, 1) com1 | com2 (그림 7.5) 예제 p232 (test1.c)
FIFO와 이름형 파이프 파이프는 부모와 자식 프로세스와 같이 조상이 같은 프로세스들만 연결 파이프는 영구히 존재할 수 없음com1 | com2 (그림 7.5) mknod channel p cat < channel &; ls –al > channel int mkfifo (const char *pathname, mode_t mode); open (“/tmp/fifo”, O_WRONLY|O_NONBLOCK) 예제 – p 238 (rcvmessage.c, sendmessage.c)
실습 client와 server와의 간단한 대화형 program client가 입력한 내용을 server가 화면에 print
고급 프로세스간 통신 message queue semaphore shared memory fcntl 을 사용한 레코드 록킹 -읽기록 -쓰기록 int fcntl(int filedes, int cmd, struct flock *ldata) . cmd – F_GETLK, F_SETLK, F_SETLKW . Ldata – l_type (F_RDLCK, F_WRLCK, F_UNLCK), l_whence, off_t l_start, off_t l_len, pid_t l_pid)
고급 프로세스간 통신 fcntl 을 사용한 레코드 록킹 -예제 – p251 (test2.c) -록 정보는 fork 호출에 의해 계승되지 않는다 fcntl 호출의 파일포인터를 변경시키지 않는다 한 프로세스에 속한 모든 록은 그 프로세스가 죽을 때 자동적으로 제거
실습 client는 argv로 받은 pipetest에 10byte록을 건 후, sleep(2), unlock argv로 받은 filename을 fifo를 통해 server로 전달 server는 filename에 해당하는 파일을 open, read, pipewrite client는 server로부터 받은 내용을 화면으로 출력