Rura jest medium do komunikacji między procesami. Jeden proces zapisuje dane do rury, a drugi proces odczytuje dane z rury. W tym artykule zobaczymy, w jaki sposób funkcja PIPE () jest używana do wdrożenia koncepcji za pomocą języka C.
O rurze
W rurze dane są przechowywane w kolejności FIFO, co oznacza zapisanie danych na jednym końcu rury sekwencyjnie i odczyt danych z innego końca rury w tej samej kolejności sekwencyjnej.
Jeśli jakikolwiek proces odczytuje z rurki, ale żaden inny proces nie zapisał się jeszcze w rurze, przeczytaj zwraca koniec pliku. Jeśli proces chce napisać do rury, ale nie ma innego procesu przymocowanego do rury do odczytu, to jest to warunek błędu, a rura generuje sygnał SIGPipe.
Plik nagłówka
#włączaćSkładnia
INT RURE (INT SILEDES [2])Argumenty
Ta funkcja przyjmuje jeden argument, szereg dwóch liczb całkowitych (zapisane). Siledes [0] jest używany do czytania z rury i Siledes [1] jest używany do pisania do rury. Proces, który chce odczytać z rury, powinien się zamknąć Siledes [1], a proces, który chce napisać do rury, powinien się zamknąć Siledes [0]. Jeśli niepotrzebne końce rury nie są wyraźnie zamknięte, to koniec pliku (EOF) nigdy nie zostanie zwrócony.
Wartości zwracane
O sukcesie, rura() zwraca 0, dla awarii funkcja zwraca -1.
Pictorialnie możemy reprezentować rura() funkcja w następujący sposób:
Poniżej znajduje się kilka przykładów przedstawiających sposób korzystania z funkcji rur w języku C.
Przykład 1
W tym przykładzie zobaczymy, jak działa funkcja rury. Chociaż użycie rury w jednym procesie nie jest bardzo przydatne, ale dostaniemy pomysł.
// Przykład 1.CTutaj najpierw utworzyliśmy fajkę za pomocą rura() funkcja, a następnie zapisana do rury za pomocą Fildes [1] koniec. Następnie dane zostały odczytane przy użyciu drugiego końca rury, czyli Siledes [0]. Do czytania i zapisywania pliku, kiedyś kiedyś Czytać() I pisać() Funkcje.
Przykład2
W tym przykładzie zobaczymy, w jaki sposób procesy rodzica i dzieci komunikują się za pomocą rury.
// Przykład2.CNajpierw utworzono jedną rurę za pomocą funkcji rur, a następnie proces dziecięcy został rozwidlony. Następnie proces dziecka zamyka koniec odczytu i pisze do rury. Proces nadrzędny zamyka koniec zapisu i odczytuje z rury i wyświetla go. Tutaj przepływ danych to tylko jeden sposób, który jest od dziecka do rodzica.
Wniosek:
rura() to potężne wywołanie systemowe w Linux. W tym artykule widzieliśmy tylko jednokierunkowy przepływ danych, jeden proces pisze, a inny proces odczytuje, tworząc dwie rury, możemy również osiągnąć dwukierunkowy przepływ danych.