// Именованные каналы в Linux // Программа из учебника "Системное программирование в среде Linux", Гунько А.В., стр. 76 // Название: mainfifo.c // Описание: взаимодействие родственных процессов // через именованные каналы //pipe/mainfifo.с #include #include #include #include #include #include #include #include #include #include "client.c" #include "server.c" #define FIFO1 "/tmp/fifo.1" #define FIFO2 "/tmp/fifo.2" #define MAXLINE 80 #define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) void client(int, int), server(int, int); int main(int argc, char **argv) { int readfd, writefd; pid_t childpid; /* создание двух FIFO, если существуют - OK */ if ((mkfifo(FIFO1, FILE_MODE) < 0) && (errno != EEXIST)) { printf("can't create %s", FIFO1); exit(-1); } if ((mkfifo(FIFO2, FILE_MODE) < 0) && (errno != EEXIST)) { unlink(FIFO1); printf("can't create %s", FIFO2); exit(-2); } if ( (childpid = fork()) == 0) { /* child */ readfd = open(FIFO1, O_RDONLY, 0); writefd = open(FIFO2, O_WRONLY, 0); server(readfd, writefd); exit(0); } /* родительский процесс */ writefd = open(FIFO1, O_WRONLY, 0); readfd = open(FIFO2, O_RDONLY, 0); client(readfd, writefd); waitpid(childpid, NULL, 0);/*ожидание завершения дочернего процесса */ close(readfd); close(writefd); unlink(FIFO1); unlink(FIFO2); exit(0); }