Składnia rura() Funkcja to:
int rura (int ripefd [2]);Tutaj funkcja PIPE () tworzy jednokierunkowy kanał danych do komunikacji między procesami. Mijasz w int (Liczba całkowita) tablica typu PIPEFD składający się z 2 elementów tablicy do rury funkcyjnej (). Następnie funkcja ripe () tworzy dwa deskryptory plików w PIPEFD szyk.
Pierwszy element PIPEFD szyk, PIPEFD [0] służy do odczytu danych z rury.
Drugi element PIPEFD szyk, PIPEFD [1] służy do pisania danych do rury.
Po sukcesie funkcja rury () zwraca 0. Jeśli błąd wystąpi podczas inicjalizacji rury, funkcja ripe () zwraca -1.
Funkcja rury () jest zdefiniowana w nagłówku unistd.H. Aby użyć funkcji Pipe () w programie C, musisz dołączyć nagłówek unistd.H następująco:
#włączaćAby uzyskać więcej informacji na temat funkcji systemu Pipe (), sprawdź stronę Man of Pipe () za pomocą następującego polecenia:
$ man 2 ruraPrzykład 1:
Dla pierwszego przykładu utwórz nowy plik źródłowy C 1_pipe.C i wpisz następujące wiersze kodów.
#włączaćTutaj dołączyłem plik nagłówka Pipe () unistd.H Najpierw z następującą linią.
#włączaćNastępnie w główny() funkcja, zdefiniowałem Pipefds Dwa elementarne macierz liczby całkowitych z następującym wierszem.
int ripefds [2];Następnie uruchomiłem funkcję PIPE (), aby zainicjować tablicę deskryptorów plików Pipefds następująco.
Rura (Pipefds)Sprawdziłem również błędy za pomocą wartości zwracanej funkcji rury (). Użyłem Wyjście() funkcja do terminalu program w przypadku awarii funkcji rury.
if (ripe (PipeFDS) == -1)Następnie wydrukowałem wartość deskryptorów odczytu i zapisu plików rury Pipefds [0] I Pipefds [1] odpowiednio.
printf („Wartość deskryptora pliku odczytu: %d \ n”, PipeFD [0]);Jeśli uruchomisz program, powinieneś zobaczyć następujące dane wyjściowe. Jak widać, wartość deskryptora odczytu pliku rury Pipefds [0] Jest 3 i napisz deskryptor pliku rury Pipefds [1] Jest 4.
Przykład 2:
Utwórz inny plik źródłowy C 2_pipe.C i wpisz następujące wiersze kodów.
#włączaćTen program zasadniczo pokazuje, jak napisać do rury i odczytać dane, które napisałeś z rury.
Tutaj przechowyłem 4-znakowy kod PIN w zwęglać szyk. Długość tablicy wynosi 5 (w tym znak zerowy \ 0).
char *pin = "4128 \ 0";Każdy znak ASCII ma 1 bajt w C. Aby wysłać 4 -cyfrowy szpilkę przez rurę, musisz napisać 5 bajtów (4 + 1 znak zerowy) danych do rury.
Napisać 5 bajtów danych (szpilka) Do rury użyłem pisać() funkcja za pomocą deskryptora pliku rur zapisu Pipefds [1] następująco.
Write (PipeFDS [1], pin, 5);Teraz, gdy mam pewne dane w rurze, mogę je odczytać z rury za pomocą Czytać() Funkcja na deskryptorze pliku rury odczytu Pipefds [0]. Jak napisałem 5 bajtów danych (szpilka) W rurze będę również odczytać 5 bajtów danych z rury. Odczyt danych będzie przechowywany w bufor tablica postaci. Jak będę czytać 5 bajtów danych z rury, bufor tablica znaków musi mieć co najmniej 5 bajtów.
Zdefiniowałem bufor tablica postaci na początku główny() funkcjonować.
Bufor char [5];Teraz mogę odczytać szpilkę z rury i przechowywać w bufor tablica z następującą linią.
odczyt (PipeFDS [0], bufor, 5);Teraz, gdy przeczytałem szpilkę z rury, mogę go wydrukować za pomocą printf () funkcjonować jak zwykle.
printf („Pin z rury: %s \ n”, bufor);Po uruchomieniu programu wyświetlane jest prawidłowe wyjście, jak widać.
Przykład 3:
Utwórz nowy plik źródłowy C 3_pipe.C jako typ w następujących wierszach kodów.
#włączaćW tym przykładzie pokazałem, jak używać rur do komunikacji między procesami. Wysłałem szpilkę z procesu dziecka do procesu nadrzędnego za pomocą rury. Następnie odczytaj pin z rury w procesie nadrzędnym i wydrukuj go z procesu nadrzędnego.
Najpierw stworzyłem proces dziecięcy za pomocą funkcji Fork ().
PID_T PID = Fork ();Następnie w procesie dziecka (PID == 0), Napisałem szpilkę do rury za pomocą pisać() funkcjonować.
Write (PipeFDS [1], pin, 5);Po zapisaniu pinu do rury z procesu potomnego procesu (PID> 0) Przeczytaj go z rury za pomocą Czytać() funkcjonować.
odczyt (PipeFDS [0], bufor, 5);Następnie proces nadrzędny wydrukował szpilkę za pomocą printf () funkcjonować jak zwykle.
printf („rodzic otrzymał pin '%s' \ n”, bufor);Jak widać, uruchomienie programu daje oczekiwany wynik.
Przykład 4:
Utwórz nowy plik źródłowy C 4_pipe.C jako typ w następujących wierszach kodów.
#włączaćTen przykład jest taki sam jak Przykład 3. Jedyną różnicą jest to, że program ten stale tworzy proces potomny, generuje kod PIN w procesie dziecka i wysyła PIN do procesu nadrzędnego za pomocą rury.
Proces nadrzędny następnie odczytuje szpilkę z rury i drukuje.
Ten program generuje nowy pin pin_length w każdej sekund pin_wait_interval.
Jak widać, program działa zgodnie z oczekiwaniami.
Możesz zatrzymać program tylko naciskając + C.
W ten sposób używasz wywołania systemu Pipe () w języku programowania C. Dziękujemy za przeczytanie tego artykułu.