1. 함수 설명
pipe(파이프라인 생성):
1) 헤더 파일 #include
2) 함수 정의: int filedes[2]) ;
3) 함수 설명: Pipe()는 파이프라인을 설정하고 매개변수 filedes 배열에서 파일 설명자를 반환합니다.
Filedes [0]은 파이프라인의 읽기 끝입니다.
Filedes [1]은 파이프의 쓰기 끝입니다.
4) 반환값 : 성공하면 0을 반환하고, 실패하면 -1을 반환하며, 에러의 원인은 errno에 저장됩니다.
오류 코드:
EMFILE 프로세스가 최대 파일 설명자 수를 모두 사용했습니다.
ENFILE 시스템에 사용 가능한 파일 설명자가 없습니다.
EFAULT 매개변수 파일의 배열 주소가 잘못되었습니다.
2. 예
#include <unistd.h> #include <stdio.h> int main( void ) { int filedes[2]; char buf[80]; pid_t pid; pipe( filedes ); pid=fork(); if (pid > 0) { printf( "This is in the father process,here write a string to the pipe.\n" ); char s[] = "Hello world , this is write by pipe.\n"; write( filedes[1], s, sizeof(s) ); close( filedes[0] ); close( filedes[1] ); } else if(pid == 0) { printf( "This is in the child process,here read a string from the pipe.\n" ); read( filedes[0], buf, sizeof(buf) ); printf( "%s\n", buf ); close( filedes[0] ); close( filedes[1] ); } waitpid( pid, NULL, 0 ); return 0; }
실행 결과:
[root@localhost src]# gcc Pipe.c
[root@ localhost src]# ./a.out
이것은 하위 프로세스에 있으며 여기 파이프에서 문자열을 읽습니다.
이것은 아버지 프로세스에 있으며 여기 파이프에 문자열을 씁니다.
Hello world , 이것은 파이프로 작성됩니다.
파이프에 있는 데이터를 읽을 때 파이프는 비어 있습니다. 후속 read() 호출은 기본적으로 차단되어 일부 데이터가 기록될 때까지 기다립니다.
비차단으로 설정해야 하는 경우 다음과 같이 설정할 수 있습니다.
fcntl(fileds[0], F_SETFL, O_NONBLOCK) );