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

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

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

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

О цеви

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

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

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

#инцлуде

Синтакса

инт цев (инт фајлови [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);

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

Закључак:

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

ВинМоусе вам омогућава да прилагодите и побољшате кретање показивача миша на Виндовс рачунару
Ако желите да побољшате подразумеване функције показивача миша, користите бесплатни програм ВинМоусе. Додаје још функција које ће вам помоћи да на нај...
Леви тастер миша не ради у оперативном систему Виндовс 10
Ако уз преносни рачунар или стони рачунар користите наменски миш, али тастер миша не ради у оперативном систему Виндовс 10/8/7 из неких разлога, ево н...
Курсор скаче или се насумично помера док куцате у оперативном систему Виндовс 10
Ако откријете да курсор миша скаче или се сам помера, аутоматски, насумично док куцате на Виндовс преносном рачунару или рачунару, неки од ових предло...