Siehe auch: fork, exec, pipe, write, close

#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
 
int main() {
    char buffer[50];
 
    pid = fork();
 
	// Gerichtete Kanäle
    int fromChild[2], toChild[2];
    
    // Pipes haben 2 Elemente:
    // 0 -> Lesen
    // 1 -> Schreibem
    pipe(fromChild); pipe(toChild);
    
    
    if(pid == -1) { 
	    // pid = -1 -> Fehler beim Erstellen
        return fprintf(stderr, "Error: %s\n", stderror(errno));
    }
    else if(pid == 0) { // pid = 0 -> Childprozess
        // Unnötige Kanäle schließen
        close(fromChild[0]); close(toChild[1]);
 
		// Sende Nachricht an Parent (insgesamt 17 Bytes)
        write(fromChild[1], "Ich bin das Kind", 17);
    }
    else { 
	    // pid > 0 -> Parentprozess
        close(fromChild[1]); close(toChild[0]);
		
		// Lese Nachriht vom Kind in den Buffer
		// Wir wissen hier dass wir 17 bytes empfagen werden
		read(fromChild[0], buffer, 17);
		
		// Nachricht ausgeben
        printf("%s\n", buffer);
    }
    return 0;
}