>  기사  >  php教程  >  리눅스 파이프 기능

리눅스 파이프 기능

高洛峰
高洛峰원래의
2016-12-13 11:34:301575검색

1. 함수 설명

pipe(파이프라인 생성):
1) 헤더 파일 #includef55648144b4a1c5cce7ad2f6519be0f3
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) );


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.