Ц Програмирање

Како се користи функција цеви у језику Ц

Како се користи функција цеви у језику Ц

Лула је медиј за комуникацију између процеса. Један процес записује податке у цијев, а други поступак чита податке из цијеви. У овом чланку ћемо видети како се функција пипе () користи за примену концепта помоћу језика Ц.

О цеви

У цеви се подаци одржавају у ФИФО редоследу, што значи секвенцијално уписивање података на један крај цеви и читање података с другог краја цеви истим секвенцијалним редоследом.

Ако било који процес чита из пипе, али ниједан други поступак још није уписао у пипе, тада реад враћа крај датотеке. Ако процес жели да упише у цев, али ниједан други процес није везан за цев за читање, онда је ово стање грешке и цев генерише СИГПИПЕ сигнал.

Датотека заглавља

#инцлуде

Синтакса

инт цев (инт фајлови [2])

Аргументи

Ова функција узима један аргумент, низ од два цела броја (поља). поља [0] користи се за очитавање из цеви, и поља [1] користи се за уписивање у цев. Процес који жели да чита из цеви треба да се затвори поља [1], а поступак који жели да упише у цев треба да се затвори поља [0].  Ако непотребни крајеви цеви нису изричито затворени, крај датотеке (ЕОФ) се никада неће вратити.

Врати вредности

О успеху, цев() враћа 0, у случају неуспјеха функција враћа -1.

Сликовито можемо представити цев() функционишу на следећи начин:

Испод је неколико примера који приказују како се користи функција цеви у језику Ц.

Пример1

У овом примеру ћемо видети како функционише функција цеви. Иако коришћење цеви у једном процесу није превише корисно, али стећи ћемо идеју.

// Пример1.ц
#инцлуде
#инцлуде
#инцлуде
#инцлуде
инт маин ()

инт н;
инт филедес [2];
пуфер цхар [1025];
цхар * мессаге = "Здраво, Ворлд!";
лула (филца);
писање (поља [1], порука, стрлен (порука));
иф ((н = читање (поља (0), бафер, 1024))> = 0)
бафер [н] = 0; // завршава низ
принтф ("прочитати% д бајта из цеви:"% с "\ н", н, бафер);

иначе
перрор ("читати");
излаз (0);

Овде смо прво креирали цев помоћу цев() функција која се затим записује у цев помоћу филдес [1] крај. Затим су подаци прочитани на другом крају цеви, тј поља [0]. Некада смо читали и писали у датотеку читати() и напиши () функције.

Пример2

У овом примеру ћемо видети како родитељски и подређени процеси комуницирају помоћу цеви.

// Пример2.ц
#инцлуде
#инцлуде
#инцлуде
#инцлуде
#инцлуде
инт маин ()

инт фајлови [2], нбитес;
пид_т цхилдпид;
цхар стринг [] = "Здраво, свете!\ н ";
цхар реадбуффер [80];
лула (филца);
иф ((цхилдпид = форк ()) == -1)

перрор ("виљушка");
излаз (1);

ако (Цхилдпид == 0)

цлосе (сервер [0]); // Подређеном процесу овај крај цеви није потребан
/ * Пошаљите "низ" кроз излазну страну цеви * /
записивање (поља [1], низ, (стрлен (низ) +1));
излаз (0);

иначе

/ * Надређени процес затвара излазну страну цеви * /
цлосе (сервер [1]); // Надређеном процесу овај крај цеви није потребан
/ * Чита се у низу из цеви * /
нбајта = читано (датотеке, [0], бафер за читање, величина (бафер за читање));
принтф ("Читање низа:% с", бафер за читање);

ретурн (0);

Прво је направљена једна цев употребом функције цеви, а потом је подрезан процес. Затим, дете процес затвара крај читања и пише у цев. Надређени процес затвара крај писања и чита из цеви и приказује га. Овде је проток података само један начин од детета до родитеља.

Закључак:

цев() је моћан системски позив у Линуку. У овом чланку видјели смо само једносмјерни ток података, један процес записује, а други чита, стварајући двије цијеви којима можемо постићи и двосмјерни ток података.

Поставите Дебиан Линук - Напредно окружење за откривање упада
Напредно окружење за откривање провала (АИДЕ) је још један метод за откривање аномалија у систему. АИДЕ се не сме мешати са познатијим системима за от...
Разумевање процеса покретања Дебиана корак по корак
Овај чланак објашњава поступак покретања Дебиан Линук-а корак по корак, почевши од БИОС-а до / сбин / инит извршење укључујући покретачки програм, ини...
Најбоље праксе за безбедност постављања Дебиан заштитног зида
Ограничавајуће и допуштене политике заштитног зида Поред синтаксе коју требате знати за управљање заштитним зидом, мораћете да дефинишете и задатке за...