Conductă fără nume

O conductă anonimă este una dintre metodele de comunicare  între procese ( IPC ) din sistemul de operare , care este disponibilă proceselor asociate - părinte și copil. Reprezentată ca o zonă de memorie pe un dispozitiv de stocare extern gestionat de sistemul de operare, care alocă părți din această zonă de memorie proceselor de interacțiune pentru lucrul în comun. Organizarea datelor în canal folosește strategia FIFO , adică informațiile care sunt scrise pentru prima dată pe canal vor fi primele care vor fi citite de pe canal.

O diferență importantă între o conductă fără nume și un fișier este că informațiile citite sunt imediat eliminate din acesta și nu pot fi citite din nou. Executarea apelurilor de sistem de mai sus poate pune procesul într-o stare de așteptare. Acest lucru se întâmplă dacă un proces încearcă să citească date dintr-o conductă goală sau să scrie date într-o conductă plină. Procesul se trezește atunci când există date în canal sau, respectiv, când există spațiu liber în canal.

Comunicarea bidirecțională între procese necesită de obicei două conducte fără nume.

Conducte fără nume în Unix

Apelul de sistem este folosit pentru a crea o conductă fără nume pipe. O matrice de două numere întregi este parametrul de ieșire al acestui apel de sistem. Dacă apelul a fost finalizat normal, atunci matricea conține doi descriptori de fișier: pentru citirea informațiilor de pe canal și, respectiv, pentru scrierea în acesta. Când un proces generează un alt proces, mânerele părintelui sunt moștenite de copil și astfel se stabilește comunicarea între cele două procese. Unul dintre ele folosește o conductă numai pentru citire, iar celălalt este doar pentru scriere. Prin urmare, dacă, de exemplu, datele urmează să fie transferate printr-o conductă de la un proces părinte la un proces copil, procesul părinte închide mânerul de citire în conductă imediat după începerea procesului copil, iar procesul copil închide mânerul de scriere la Conducta. Dacă este nevoie de comunicare bidirecțională, atunci procesul părinte creează două canale, dintre care unul este folosit pentru a transfera date într-o direcție, iar celălalt în cealaltă.

Un apel de sistem este folosit pentru a scrie informații pe un canal write. Pentru a citi informații de pe un canal - un apel de sistem read. Primul argument al acestor apeluri este un descriptor de canal de tip int, al doilea este un pointer către zona de memorie cu care are loc schimbul, de tip void, al treilea este numărul de octeți, un tip întreg. Ambele apeluri returnează numărul de octeți transferați (sau „-1” în caz de eroare). Când conducta se termină, procesul emite un apel de sistem close.

Conducte fără nume pe Windows

La fel ca multe alte metode de comunicare între procese, conductele fără nume sunt create și configurate folosind funcțiile API Windows . CreatePipefolosit pentru a crea o conductă fără nume. Această funcție returnează doi descriptori (pentru citire și, respectiv, scriere pe canal). Pentru ca un proces copil să moștenească mânere, acesta trebuie să fie creat de o funcție CreateProcesscu indicatorul de moștenire TRUE. După ce a primit descriptorul necesar, procesul poate interacționa în continuare cu canalul folosind funcțiile ReadFileși WriteFile, care oferă citirea informațiilor de pe canal și, respectiv, scrierea informațiilor pe canal. Când ați terminat cu canalul, ambele procese trebuie să închidă mânerele cu CloseHandle.

Link -uri