Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 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; }

В этой программе информацией между собой обмениваются процесс-родитель и процесс-ребенок.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных