Sind Unix-Pipe (|) und Pipe, die wir mit "pipe (int pipefd [2])" erzeugen, in c gleich?

8

Sind Unix-Pipe (|), Pipelines die Ausgabe eines Prozesses zu einem anderen und Pipe wir erstellen mit "Pipe (Int Pipefd [2])" in c für Interprozesskommunikation die gleiche?

    
Ps Akshay 14.12.2015, 13:37
quelle

3 Antworten

5

Sie sind nicht ganz gleich in dem Sinne, dass das Aufrufen von pipe(2) nicht ausreicht, um die äquivalente Funktion der Shell | zu implementieren.

pipe(2) erstellt zwei Dateideskriptoren (Leseende und Schreibende). Aber Sie müssen mehr als das tun, um | Funktionalität zu implementieren.

Die typische Reihenfolge beim Erstellen eines Rohrs lautet wie folgt:

1) Erstellen Sie ein Leseende und ein Schreibende mit pipe(2) .

2) Erstellen Sie einen untergeordneten Prozess mit fork() .

3) Eltern- und Kindprozesse duplizieren die Dateideskriptoren mit dup2() .

4) Beide Prozesse schließen jeweils ein Ende der Pipe (das eine Ende der Pipe, das jeder Prozess nicht verwendet).

5) Man schreibt in die Pipe und andere liest aus der Pipe.

Betrachten Sie ein einfaches Beispiel, um dies zu demonstrieren. In diesem übergeben Sie einen Dateinamen als Argument und der Elternprozess "greps" die Datei, die cat vom Kind ist.

%Vor%

Dies entspricht dem Ausführen

%Vor%

auf der Shell.

    
P.P. 14.12.2015, 13:53
quelle
6

Das Shell-Pipe | wird mit pipe(2) und dup2(2) Systemaufrufen implementiert.

Siehe Unix Pipes .

>     
falsetru 14.12.2015 13:41
quelle
0

Der von Shells verwendete pipe(2) syscall für das Piping mit dem Operator |

| ist die Implementierung der Shell, intern wird% syscall% co_de verwendet.

    
Jeegar Patel 14.12.2015 13:44
quelle

Tags und Links