ВУЗ:
Составители:
16
pid_t childPid;
int flds[2], status;
char buf[]="Message";
// Создание канала
if (pipe(flds) == -1) {
perror("Pipe");
exit(1);
}
// Ветвление процессов
switch (childPid=fork()) {
case -1: perror("fork");
exit(2);
case 0: close(flds[0]); //Потомок
printf("Child process %d\n", getpid());
write(flds[1], buf, strlen(buf));
close(flds[1]);
exit(0);
}
// Процесс - родитель
printf("Process %d\n", getpid());
close(flds[1]);
read(flds[0], buf, 80);
printf("String -> %s\n", buf);
close(flds[0]);
wait(&status);
return status;
}
В начале программы создается канал и формируются два идентификатора
файлов для этого канала (flds[0] и flds[1]). Будем считать, что у родитель-
ского процесса flds[0] используется для приема данных, поэтому в начале
секции родительского процесса необходимо закрыть канал, связанный с файло
-
вым идентификатором flds[1]. В порожденном процессе закрывается канал с
идентификатором flds[0].
Следующий пример иллюстрирует обмен данными между двумя незави-
симыми процессами через именованный канал.
pid_t childPid;
int flds[2], status;
char buf[]="Message";
// Создание канала
if (pipe(flds) == -1) {
perror("Pipe");
exit(1);
}
// Ветвление процессов
switch (childPid=fork()) {
case -1: perror("fork");
exit(2);
case 0: close(flds[0]); //Потомок
printf("Child process %d\n", getpid());
write(flds[1], buf, strlen(buf));
close(flds[1]);
exit(0);
}
// Процесс - родитель
printf("Process %d\n", getpid());
close(flds[1]);
read(flds[0], buf, 80);
printf("String -> %s\n", buf);
close(flds[0]);
wait(&status);
return status;
}
В начале программы создается канал и формируются два идентификатора
файлов для этого канала (flds[0] и flds[1]). Будем считать, что у родитель-
ского процесса flds[0] используется для приема данных, поэтому в начале
секции родительского процесса необходимо закрыть канал, связанный с файло-
вым идентификатором flds[1]. В порожденном процессе закрывается канал с
идентификатором flds[0].
Следующий пример иллюстрирует обмен данными между двумя незави-
симыми процессами через именованный канал.
16
Страницы
- « первая
- ‹ предыдущая
- …
- 14
- 15
- 16
- 17
- 18
- …
- следующая ›
- последняя »
