LINUX.ORG.RU

FIFOs, pipes & дочки


0

0

Вобщем у меня такая загвоздка - есть приклада которая форкается, и в дочке делается execlp с запуском скрипта из под шелл. Родитель должен записать данные в скрипт( пробовал через pipe и через FIFO ), тот их обрабатывает и возвращает через FIFO. Загвоздка в том что не удается точно определить - есть ли кто с другой стороны трубы. Например, если командная строка неверная, то шелл исполниться, а скрипт нет, соотв. никого по ту сторону трубы не будет. pselect не катит т.к. в случае pipe он нормально срабатывает из-за запуска шелла, а в случае FIFO - нужно либо открывать на запись в неблокируещем режиме и проверять на ENXIO ( опять же бесконечный цикл получается ), либо в блокирующем - и тогда ступор, если неверная команда шелла. Предварительный анализ перед этими манипуляциями через waitpid ( -1, 0, WNOHANG) == 0 не всегда срабатывает, а вводить таймаут - нехорошо ... Вот такая загагулина. Заранее благодарен за дельные советы.

★★

Ну насколько я понял из твоих путанных объяснений, тебе нужно узнать исполнился ли скрипт? Т.е задача из ряда IPC, сделай так чтоб твой скрипт в случае успешного выполнения генерил файл в заранее огвореном месте (о типу .pid файлов), ну вот а товя программа соответственно проверяет его существование. Или записывай в заренее оговореный файл данные о результате выполнения.

Oksiv
()
Ответ на: комментарий от Oksiv

ОК, спасибо, задачку решил - в родителе делается цикл с open на запись в FIFO в неблокируещем режиме с проверкой на ENXIO и с проверкой на waitpid( -1,0,WNOHANG)==0.

PETER ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.