| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > как передать информацию через файловую систему? |
| Автор: abskura 12.12.2009, 16:16 |
| Обращаюсь к достопочтенным форумчанам со следующим вопросом: - Что на практике означает (какие системные вызовы используются): "Передать полученную информацию через файловую систему в параллельный процесс"? Понятно, что тут юзается fork(), а вот что значит передать через файловую систему? Это как? Это же явно не pipe(), тут что-то другое, подскажите что. Полный текст задания: Написать программу определения типа файла, указанного при запросе. Полученную информацию через файловую систему передать в параллельный процесс, где вывести на печать. Предусмотреть возможность поступления неоднократного прерывания от клавиатуры. При поступлении каждого сигнала прерывания выводить количество файлов (из числа указанных при запросе), содержащих текст программ на Си. |
| Автор: MAKCim 12.12.2009, 16:24 |
| скорее всего имеется в виду либо именованный канал (man mkfifo), либо обычный файл |
| Автор: djamshud 12.12.2009, 16:45 |
| Плюсую fifo. Но и через файл можно: man select, man poll. |
| Автор: abskura 13.12.2009, 00:32 | ||||
Реализую через mkfifo
В итоге при выполнении программы появлятеся это:
И программа остаётся не завершённой. На чём-то виснет и не выходит. В процесс отец она получается вообще не попадает, а в сына аж два раза запускала. Завершить её можно нажав ctrl+C. Все перроры молчат... В чём тут может быть загвоздка? Просто первый раз использую mkfifo. |
| Автор: abskura 13.12.2009, 00:57 | ||
| Добавил флаг O_NONBLOCK в оба open(). Теперь ситуация выглядит следующим образом
Чем не доволен опен? |
| Автор: MAKCim 13.12.2009, 11:00 |
тут логическая ошибка Добавлено через 9 минут и 8 секунд в неблокирующем режиме открыть канал на запись можно только если некоторый _уже_ открыл его на чтение |
| Автор: abskura 13.12.2009, 16:17 |
| MAKCim Спасибо вам огромное, всегда выручаете). if проглядел). С mkfifo разобрался. При попытке записи в FIFO, который не открыт в данный момент для чтения ни одним процессом, генерируется сигнал SIGPIPE. При помощи обработчика сигнала мы эту гадость обходим и радуемся жизни. http://www.opennet.ru/docs/RUS/linux_parallel/node17.html |