Heim  >  Artikel  >  php教程  >  Linux-Pipe-Funktion

Linux-Pipe-Funktion

高洛峰
高洛峰Original
2016-12-13 11:34:301575Durchsuche

1. Funktionsbeschreibung

Pipe (Pipeline erstellen):
1) Header-Datei #includef55648144b4a1c5cce7ad2f6519be0f3
2) Funktion definieren: int pipe(int filedes[2]) ;
3) Funktionsbeschreibung: pipe() richtet eine Pipeline ein und gibt den Dateideskriptor aus dem Parameter-Filedes-Array zurück.
Filedes [0] ist das lesende Ende der Pipeline.
Filedes [1] ist das schreibende Ende der Pipeline.
4) Rückgabewert: Bei Erfolg Null zurückgeben, andernfalls -1 zurückgeben, und die Fehlerursache wird in errno gespeichert.

Fehlercode:
EMFILE Der Prozess hat die maximale Anzahl an Dateideskriptoren erschöpft
ENFILE Im System sind keine Dateideskriptoren verfügbar.
EFAULT-Parameterdatei-Array-Adresse ist unzulässig.

2. Beispiel

#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;  
}

Ergebnis ausführen:


[root@localhost src]# gcc pipe.c
[root@ localhost src]# ./a.out
Dies ist im untergeordneten Prozess, hier wird eine Zeichenfolge aus der Pipe gelesen.
Dies ist im Vaterprozess, hier wird eine Zeichenfolge in die Pipe geschrieben.
Hallo Welt , das ist das Schreiben per Pipe.

Wenn die Daten in der Pipe gelesen werden, ist die Pipe leer. Ein nachfolgender read()-Aufruf blockiert standardmäßig und wartet darauf, dass einige Daten geschrieben werden.

Wenn Sie es auf nicht blockierend einstellen müssen, können Sie die folgenden Einstellungen vornehmen:

fcntl(fileds[0], F_SETFL, O_NONBLOCK);


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn