Unter Linux ist eine Pipe ebenfalls eine Art Datei, aber sie ist etwas Besonderes. Wir können die Pipe-Funktion verwenden, um eine Pipe zu erstellen, und ihr Prototyp wird wie folgt deklariert:
#inlcude
int Pipe(int Fields[2]);
Tatsächlich entspricht es einem Kommunikationspuffer, Fields[0] wird zum Lesen verwendet und Fields[1] wird zum Schreiben verwendet. Im folgenden Beispiel wird eine Pipe als Kommunikationspuffer erstellt. Der übergeordnete Prozess erstellt einen untergeordneten Prozess. Der untergeordnete Prozess schreibt über den Fields[1]-Deskriptor der Pipe eine Zeichenfolge, während der übergeordnete Prozess die Felder[ verwendet. 1] der Pipe. 0] Lesen Sie diese Zeichenfolge aus der Pipe und zeigen Sie sie an:
#include
#include
#include < unistd.h>
#include
#include
#include
#include
#define BUF_SIZ 255 // Nachrichtenpuffergröße
int main(int argc, char **argv)
{
char buffer[BUF_SIZ + 1];
int fd [2];
// einen String als Parameter erhalten
if (argc != 2)
{
fprintf(stderr, "Verwendung: %s stringna", argv[0] );
exit(1);
}
// Pipe für Kommunikation erstellen
if (pipe(fd) != 0)
{
fprintf(stderr, "Pipe-Fehler erstellen: %sna", strerror(errno));
exit(1);
}
if (fork() == 0) // in child verarbeiten Nachricht in Pipe schreiben
{
close(fd[0]);
printf("Child %ld write to pipena", getpid()); s", argv [1]);
write(fd[1], buffer, strlen(buffer));
printf("Child %ld quit.na", getpid());
}
else // im übergeordneten Prozess Nachricht aus Pipe lesen
{
close(fd[1]);
printf("Parent %ld read from pipena", getpid());
memset(buffer , '