Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > Блокировка файла |
Автор: deber 30.11.2007, 17:26 | ||
Ситуация примерно такая:
readfile() постоянно читает данный файл. Мне нужно знать когда во временный файл прекратиться запись. Как это сделать наиболее хорошим способом? ![]() ЗЫ Обратите внимание на '&' |
Автор: arto 30.11.2007, 17:44 |
что означает "прекратиться запись"? |
Автор: deber 30.11.2007, 18:19 |
Сори, ошибся, конечно прекратится. Т.е. когда процессы перестанут писать в него что-либо. При этом мне надо чтобы процедура readfile могла читать его сразу. Т.е. читает и обновляет до тех пор, пока файл пополняется. Когда все процессы отпадут - конец программы. |
Автор: arto 1.12.2007, 08:21 |
да хоть и "прекратится". вопрос в том, что считать прекращением записи -- когда процесс умрет, когда процесс не пишет более часа, когда процесс не пишет более суток? |
Автор: deber 3.12.2007, 08:42 |
Хорошо, по другому. Можно ли определить завершились ли все system'ы? |
Автор: arto 3.12.2007, 11:38 |
в вашем случае system запускает shell который запускает команду с амперсандом. следовательно, команда завершается сразу, успешно. |
Автор: deber 3.12.2007, 12:52 | ||||
Да, верно. Вот придумал кривой вариант, но что-то сомнения какие-то: main.pl:
prog1.pl:
prog2.pl ... progN.pl - аналогичные по структуре prog1.pl Насколько это кривой вариант? |
Автор: arto 3.12.2007, 13:39 |
кривой. можно проще -- fork + exec + wait. |
Автор: deber 3.12.2007, 14:06 |
Боюсь wait в данном случае не прокатит. Он блокирующий. А мне нужно работать с файлом когда еще идет запись, а не когда она закончится. Когда закончится, мне он уже не нужен. Т.е. если первый процесс записывает в файл такие строки: 1 2 3 4 А второй записывает такие: a b c d Таким образом, если процессы успели записать только "1, 2, 3". То мне нужно получить эти строки. При следующем запросе я хочу увидеть больше, например: "1, 2, 3, 4, a, b". А когда процессы отвалятся я увижу полную картину и тоже хочу отвалиться. ЗЫ Прошу прощения, если я плохо объясняю. Рад любой помощи. |
Автор: arto 3.12.2007, 14:46 |
тогда не wait, а pipe, или любой другой ipc, в детях не exec, а тот-же system, но без &, и посылка папе какого-либо сигнала по ipc. папа делает свою работу и изредка проверяет сигнал от ребенка. |