Работа с интерфейсом прикладного программирования операционной системы Linux. Шашков Б.Д. - 16 стр.

UptoLike

Составители: 

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