forked from Oricadu/labs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfifthLab.c
More file actions
48 lines (33 loc) · 1.44 KB
/
fifthLab.c
File metadata and controls
48 lines (33 loc) · 1.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
//#include <dos.h>
int main(int argc, char const *argv[])
{
int pipefd[2]; //элементы указывают на канал чтения (pipefd[0]) и на канал записи (pipefd[1])
pid_t p1, p2;
char buf[] = "HeLlO wOrLd!"; //пишет первый дочерний процесс
char buf2[2]; //этим читает второй
if (pipe(pipefd) == -1) { //если не удалось создать канал
perror("pipe");
exit(EXIT_FAILURE);
}
if ((p1 = fork()) == 0)
{//это выполняет первый дочерний процесс
close(pipefd[0]); //щакрыть канал чтения
write(pipefd[1], buf, sizeof(buf)); //записать из буфера количество байтов, равное размеру буфера
exit(0);
}
if (p1 > 0 && (p2 = fork() == 0)) //создать из родителя второго потомка
{//это выполняет второй дочерний процесс
close(pipefd[1]); //закрыть канал записи
while(read(pipefd[0], buf2, 1) != 0){ //посимвольно считать,
printf("%c", toupper(buf2[0])); //перевести в верхний регистр и вывести
}
exit(0);
}
return 0;
}