ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Прогон программы c FIFO в родственных процессахДля иллюстрации взаимодействия процессов через FIFO рассмотрим такую программу: /* Программа 03-4.с, осуществляющая однонаправленную связь через FIFO между процессом-родителем и процессом-ребенком */ #include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <stdio.h>int main(){int fd, result;size_t size;char resstring[14]; charname[]="aaa.fifo";/* Обнуляем маску создания файлов текущего процесса для того, чтобы права доступа у создаваемого FIFO точно соответствовали параметру вызова mknod() */ (void)umask(0); /* Попытаемся создать FIFO с именем aaa.fifo в текущей директории */if(mknod(name, S_IFIFO | 0666, 0) < 0){/* Если создать FIFO не удалось, печатаем об этомсообщение и прекращаем работу */printf("Can′t create FIFO");exit(-1); } /* Порождаем новый процесс */ if((result = fork()) < 0){ /* Если создать процесс не удалось, сообщаем об этом и завершаемработу */printf("Can′t fork child");exit(-1); } else if (result > 0) {/* Мы находимся в родительском процессе, который будетпередавать информацию процессу-ребенку. В этом процессе открываем FIFO на запись.*/if((fd = open(name, O_WRONLY)) < 0){/* Если открыть FIFO не удалось, печатаем об этом сообщение и прекращаем работу */printf("Can′t open FIFO for writing"); exit(-1); } /* Пробуем записать в FIFO 14 байт, т.е. всю строку"Hello, world!" вместе с признаком конца строки */size = write(fd, "Hello, world!", 14);if(size!= 14){/* Если записалось меньшее количество байт,то сообщаемоб ошибке и завершаем работу */printf("Can′t write all string to FIFO"); exit(-1); } /* Закрываем входной поток данных и на этом родительпрекращаетработу */close(fd);printf("Parent exit");} else {/* Мы находимся в порожденном процессе, который будетполучать информацию от процесса-родителя. Открываем FIFO начтение.*/if((fd = open(name, O_RDONLY)) < 0){/* Если открыть FIFO не удалось, печатаем об этомсообщение и прекращаем работу */printf("Can′t open FIFO for reading"); exit(-1); } /* Пробуем прочитать из FIFO 14 байт в массив, т.е.всю записанную строку */ size = read(fd, resstring, 14);if(size < 0){/* Если прочитать не смогли, сообщаем об ошибке изавершаемработу */printf("Can′t read string"); exit(-1); } /* Печатаем прочитанную строку */printf("%s",resstring);/* Закрываем входной поток и завершаем работу */ close(fd); } return 0; }В этой программе информацией между собой обмениваются процесс-родитель и процесс-ребенок. Не нашли, что искали? Воспользуйтесь поиском:
|