Syntaksen til rør() funksjon er:
int pipe (int pipefd [2]);Her oppretter Pipe () -funksjonen en ensrettet datakanal for kommunikasjon mellom prosessen. Du passerer i en int (Heltall) type matrise Pipefd bestående av 2 array -element til funksjonsrøret (). Deretter oppretter Pipe () -funksjonen to filbeskrivelser i Pipefd Array.
Det første elementet i Pipefd Array, Pipefd [0] brukes til å lese data fra røret.
Det andre elementet i Pipefd Array, Pipefd [1] brukes til å skrive data til røret.
Ved suksess returnerer Pipe () -funksjonen 0. Hvis det oppstår en feil under pipeinitialisering, returnerer Pipe () -funksjonen -1.
Pipe () -funksjonen er definert i overskriften Unistd.h. For å bruke Pipe () -funksjonen i C -programmet ditt, må du ta med overskriften Unistd.h følgende:
#inkludereFor mer informasjon om Pipe () Systemfunksjon, sjekk Man -siden til Pipe () med følgende kommando:
$ mann 2 rørEksempel 1:
For det første eksemplet, oppretter du en ny C -kildefil 1_pipe.c og skriv inn følgende koderlinjer.
#inkludereHer inkluderte jeg toppfilen til Pipe () Unistd.h Først med følgende linje.
#inkludereDa, i hoved() funksjon, jeg definerte Pipefds To element heltall med følgende linje.
int pipefds [2];Deretter kjørte jeg Pipe () -funksjonen for å initialisere filbeskrivelsesarrayen Pipefds følgende.
rør (pipefds)Jeg sjekket også for feil ved å bruke returverdien til Pipe () -funksjonen. Jeg brukte exit() funksjon for å terminal programmet i tilfelle rørfunksjonen mislykkes.
if (pipe (pipefds) == -1)Deretter trykket jeg verdien av lesings- og skrivepipefilbeskrivelsene pipefds [0] og PIPEFDS [1] henholdsvis.
printf ("Les filbeskrivelsesverdi: %d \ n", pipefds [0]);Hvis du kjører programmet, bør du se følgende utdata. Som du kan se, verdien av leserørfilbeskrivelsen pipefds [0] er 3 og skriv pipefilbeskrivelse PIPEFDS [1] er 4.
Eksempel 2:
Opprett en annen C -kildefil 2_pipe.c og skriv inn følgende koderlinjer.
#inkludereDette programmet viser i utgangspunktet hvordan du skriver til røret og leser dataene du har skrevet fra røret.
Her lagret jeg en 4-karakter pin-kode i en røye Array. Lengden på matrisen er 5 (inkludert nullkarakteren \ 0).
char *pin = "4128 \ 0";Hver ASCII -karakter er 1 byte i størrelse i C. Så for å sende den firesifrede pinnen gjennom røret, må du skrive 5 byte (4 + 1 nullkarakter) av data inn i røret.
Å skrive 5 byte data (Pin) I røret brukte jeg skrive() Funksjon ved hjelp av skrivepipefilbeskrivelsen PIPEFDS [1] følgende.
skriv (pipefds [1], pin, 5);Nå som jeg har noen data i røret, kan jeg lese den fra røret ved hjelp av lese() Funksjon på lesepipefilbeskrivelsen pipefds [0]. Som jeg har skrevet 5 byte med data (Pin) inn i røret, vil jeg lese 5 byte data fra røret også. Data som leses vil bli lagret i buffer Karakterer. Som jeg skal lese 5 byte med data fra røret, buffer Karakterer må være minst 5 byte lang.
Jeg har definert buffer tegnarray i begynnelsen av hoved() funksjon.
char buffer [5];Nå kan jeg lese pinnen fra røret og lagre den i buffer matrise med følgende linje.
Les (pipefds [0], buffer, 5);Nå som jeg har lest pinnen fra røret, kan jeg skrive den ut ved å bruke printf () funksjon som vanlig.
printf ("pin from pipe: %s \ n", buffer);Når jeg har kjørt programmet, vises riktig utgang som du kan se.
Eksempel 3:
Opprett en ny C -kildefil 3_pipe.c Som skriv inn følgende koderlinjer.
#inkludereI dette eksemplet viste jeg deg hvordan du bruker Pipe for interprosess-kommunikasjon. Jeg har sendt en pin fra barneprosessen til overordnet prosess ved hjelp av et rør. Les deretter tapp.
Først har jeg opprettet en barneprosess ved hjelp av gaffel () -funksjonen.
pid_t pid = gaffel ();Da, i barneprosessen (PID == 0), Skrev jeg pinnen til røret ved hjelp av skrive() funksjon.
skriv (pipefds [1], pin, 5);Når pinnen er skrevet til røret fra barneprosessen, er foreldreprosessen (PID> 0) Les den fra røret ved hjelp av lese() funksjon.
Les (pipefds [0], buffer, 5);Deretter trykket foreldreprosessen pinnen ved hjelp av printf () funksjon som vanlig.
printf ("foreldre mottatt pin '%s' \ n", buffer);Som du ser, gir å kjøre programmet det forventede resultatet.
Eksempel 4:
Opprett en ny C -kildefil 4_pipe.c Som skriv inn følgende koderlinjer.
#inkludereDette eksemplet er det samme som Eksempel 3. Den eneste forskjellen er at dette programmet kontinuerlig oppretter en barneprosess, genererer en pinne i barneprosessen og sender pinnen til overordnet prosess ved hjelp av et rør.
Foreldreprosessen leser deretter tappen fra røret og skriver den ut.
Dette programmet genererer en ny pin_length -pin hvert pin_wait_interval sekunder.
Som du ser fungerer programmet som forventet.
Du kan bare stoppe programmet ved å trykke + C.
Så det er slik du bruker PIPE () Systemanrop på programmeringsspråk. Takk for at du leste denne artikkelen.