두 프로세스 사이에서 한 방향으로 통신할 수 있도록 지원하는 것
이름 없는 파이프는 부모-자식 프로세스 간에 통신을 할 수 있게 함
int main(){
FILE *fp;
int a;
fp = popen("wc-l", "w");
for(a = 0 ; a < 100; a++) fprintf(fp, "testline\n");
pclose(fp);
}
int main(){
int fd[2];
pid_t pid;
char buf[257];
int len, status;
pipe(fd);
switch(pid = fork()){
case 0:
close(fd[1]);
write(1, "child process", 15);
len = read(fd[0], buf, 256);
close(fd[0]);
break;
default:
close(fd[0]);
write(fd[1], "Test Message\n", 14);
close(fd[1]);
waitpid(pid, &status, 0);
break;
}
}
부모-자식 프로세스 관계가 아닌 독립적인 프로세스들이 파이프를 이용하려면 파일처럼 이름이 있어야 함.
Timeout
은 struct timeval 에 대한 포인터
포인터가 널이면 select는 흥미있는 일이 일어날 때까지 봉쇄. 만일 timeout이 0초를 포함하는 구조를 가리키면 즉각 복귀. 0이 아닌 값을 포함하고 있으면 지정된 시간 후에 복귀
int fd1, fd2;
fd_set readset;
fd1 = open("file1", O_RDONLY);
fd2 = open("file2", O_RDONLY);
FD_ZERO(&readset);
FD_SET(fd1, &readset); FD_SET(fd2, &readset);
switch(select(5, &readset, NULL, NULL, NULL)){
}
mknod 파일명 p
-m 옵션은 새로 생성되는 FIFO 파일의 접근 권한을 지정
mkfifo -m 0644 BIT_FIFO
mkfifo("BIT_FIFO", 0644);
Server.c
int pd, n;
char msg[] = "Hello, FIFO";
mkfifo("./HAN-FIFO", 0666);
pd = open("./HAN-FIFO", O_WRONLY);
n = write(pd, msg, strlen(msg)+1);
close(pd);
Client.c
int pd, n;
char inmsg[80];
pd = open("./HAN-FIFO", O_RDONLY);
while((n = read(pd, inmsg, 80)) > 0)
write(1, inmsg, n);