컴퓨터 공부/Advanced UNIX System Programming

[5월 11일 1교시] FIFO

려리군 2009. 5. 11. 09:58

FIFO(named pipe)

 FIFO파일(named)을 읽고 씀으로써 파이프 통신을 한다.


#include<stdio.h>

int mknod(char *pathname, mode_t mode , dev_t dev);

특수한 파일을 만든다.

pathname - 경로, mode - 파일 권한 + 파일의 형태, dev - 디바이스 번호

int mkfifo(char *pathname, mode_t mode);

FIFO파일을 만든다. wrapper함수로 내부적으로 mknod(pathname, S_IFIFO|PERMS|...,NULL)을 호출한다.

pathname - 경로, mode - 파일 권한


 상황O_NDELAY 없음(blocking) O_NDELAY 설정(nonblocking) 
 write하려는 프로세스 X
read로 fifo open
write로 FIFO를 open하려는 프로세스 나타날 때까지 block 에러 없이 즉시 리턴. 
 read하려는 프로세스 X
write로 fifo open
 read로 FIFO를 open하려는 프로세스 나타날 때까지 blockerrno = ENXIO와 함께 즉시 리턴. 
 FIFO를 read하려는 데 비었을 경우FIFO가 write될 때까지 block. 만약 write하려는 프로세스가 없으면 0을 리턴즉시 0을 리턴. 
FIFO를 write하려는 데 꽉찼을 경우버퍼에 빈 공간이 생길 때까지 block즉시 0을 리턴.

※ sys_err_str = strerror(int) : errno의 문자를 리턴.