Архитектура Unix

       

. Пример программы, в которой



Рисунок 7.34. Пример программы, в которой процесс-родитель и процесс-потомок не разделяют доступ к файлу

#include <fcntl.h> int fdrd,fdwt; char c; main(argc,argv) int argc; char *argv[]; { if (argc != 3) exit(1); fork(); if ((fdrd = open(argv[1],O_RDONLY)) == -1) exit(1); if (((fdwt = creat(argv[2],0666)) == -1) && ((fdwt = open(argv[2],O_WRONLY)) == -1)) exit(1); rdwrt(); } rdwrt() { for (;;) { if (read(fdrd,&c,1) != 1) return; write(fdwt,&c,1); } }


3. Еще раз обратимся к программе, приведенной на Рисунке 7.5 и показывающей, как два процесса обмениваются сообщениями, используя спаренные каналы. Что произойдет, если они попытаются вести обмен сообщениями, используя один канал?

4. Возможна ли потеря информации в случае, когда процесс получает несколько сигналов прежде чем ему предоставляется возможность отреагировать на них надлежащим образом? (Рассмотрите случай, когда процесс подсчитывает количество полученных сигналов о прерывании.) Есть ли необходимость в решении этой проблемы?

5. Опишите механизм работы системной функции kill.

6. Процесс в программе на Рисунке 7.35 принимает сигналы типа "гибель потомка" и устанавливает функцию обработки сигналов в исходное состояние. Что происходит при выполнении программы?



Содержание раздела