C Програмиране

Как да използвам функцията pipe на C език

Как да използвам функцията pipe на C език

Тръбата е среда за комуникация между процесите. Един процес записва данни в тръбата, а друг процес чете данните от тръбата. В тази статия ще видим как функцията pipe () се използва за реализиране на концепцията с помощта на C език.

За тръбата

В тръбата данните се поддържат в последователност FIFO, което означава последователно записване на данни в единия край на тръбата и четене на данни от друг край на тръбата в същия последователен ред.

Ако някой процес чете от тръбата, но никой друг процес все още не е записал в тръбата, тогава read връща края на файла. Ако даден процес иска да пише в тръба, но няма друг процес, прикрепен към тръбата за четене, това е състояние на грешка и тръбата генерира сигнал SIGPIPE.

Заглавен файл

#include

Синтаксис

int тръба (int files [2])

Аргументи

Тази функция приема един аргумент, масив от две цели числа (подадени). поляци [0] се използва за отчитане от тръбата и поляци [1] се използва за запис в тръбата. Процесът, който иска да чете от тръбата, трябва да се затвори поляци [1], и процесът, който иска да пише в тръбата, трябва да се затвори поляци [0].  Ако ненужните краища на тръбата не са изрично затворени, тогава края на файла (EOF) никога няма да бъде върнат.

Връща стойности

При успех, тръба() връща 0, при неуспех функцията връща -1.

Нагледно можем да представим тръба() функционират както следва:

По-долу са дадени няколко примера, изобразяващи как да се използва функцията pipe на език C.

Пример1

В този пример ще видим как работи функцията на тръбата. Въпреки че използването на тръба в един процес не е много полезно, но ще получим идея.

// Пример1.° С
#include
#include
#include
#include
int main ()

int n;
int подсигурени [2];
буфер за символи [1025];
char * message = "Здравей, Свят!";
тръба (подадена);
запис (файлови [1], съобщение, strlen (съобщение));
if ((n = четене (подадени [0], буфер, 1024))> = 0)
буфер [n] = 0; // прекратяване на низа
printf ("прочетете% d байта от тръбата:"% s "\ n", n, буфер);

друго
perror ("четене");
изход (0);

Тук първо създадохме тръба с помощта тръба() след това се записва в тръбата с помощта на fildes [1] край. След това данните са прочетени с помощта на другия край на тръбата, който е поляци [0]. За четене и запис във файла, ние използвахме Прочети() и напиши () функции.

Пример2

В този пример ще видим как родителските и дъщерните процеси комуникират посредством тръбата.

// Пример2.° С
#include
#include
#include
#include
#include
int main ()

int файловете [2], nbytes;
pid_t childpid;
char string [] = "Здравей, свят!\н";
char буфер за четене [80];
тръба (подадена);
if ((childpid = fork ()) == -1)

perror ("вилица");
изход (1);

ако (Childpid == 0)

close (сервер [0]); // Процесът на детето не се нуждае от този край на тръбата
/ * Изпратете "низ" през изходната страна на тръбата * /
запис (файлови [1], низ, (strlen (низ) +1));
изход (0);

друго

/ * Родителският процес затваря изходната страна на тръбата * /
close (сервер [1]); // Родителският процес не се нуждае от този край на тръбата
/ * Прочетете в низ от тръбата * /
nbytes = четене (подадени файлове [0], буфер за четене, sizeof (readbuffer));
printf ("Четене на низ:% s", буфер за четене);

връщане (0);

Първо, една тръба е създадена с помощта на функцията на тръбата, след което е раздвоен детски процес. След това дъщерният процес затваря края на четене и записва в тръбата. Родителският процес затваря края на запис и чете от тръбата и го показва. Тук потокът от данни е само един начин, който е от дете към родител.

Заключение:

тръба() е мощен системен разговор в Linux. В тази статия видяхме само еднопосочен поток от данни, един процес пише и друг процес чете, създавайки две тръби, които можем да постигнем и двупосочен поток от данни.

Vulkan за потребители на Linux
С всяко ново поколение графични карти виждаме, че разработчиците на игри преместват границите на графичната вярност и се приближават една крачка до фо...
OpenTTD срещу Simutrans
Създаването на собствена транспортна симулация може да бъде забавно, релаксиращо и изключително примамливо. Ето защо трябва да сте сигурни, че изпробв...
Урок за OpenTTD
OpenTTD е една от най-популярните бизнес симулационни игри там. В тази игра трябва да създадете прекрасен транспортен бизнес. Въпреки това, ще започне...