Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Про pipe и fork - куда могут деваться данные?  (Прочитано 1332 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн wl

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Есть задача запускать из своей программы другую и отлавливать, что она делает.
Другое приложение - это FFmpeg (но это не важно).
Проблема в том, что моя программа почему-то не всегда видит последнюю выведенную ей строку.

Я создаю pipe, потом выполняю fork и exec.
В процессе работы периодически читаю функцией fgets из своего конца трубы то, что FFmpeg туда пишет.
И эта функция либо не отдает последнюю строчку, которую ffmpeg ей написала, либо зависает, ожидая, что ffmpeg туда что-то напишет, а ffmpeg уже давно закончила работу и ждет в виде зомби (ffmpeg [<defunct>]), когда же ее соберут функцией waitpid().

Код под спойлером

(Нажмите, чтобы показать/скрыть)

Пробовал перед чтением опрашивать дескриптор pselect-ом - эта функция возвращает, что данных нет.
Пробовал после цикла еще раз читать что-то из трубы - то же самое, либо fgets подвисает в ожидании данных, либо pselect возвращает нули, (т.е. нечего читать).

Пользователь решил продолжить мысль 22 Июля 2009, 08:21:00:
Агаа!
fgets читает из потока до тех пор, пока не встретит eof или \n.
EOF там точно нет, и \n FFmpeg туда не пишет - вероятно поэтому fgets и виснет.
« Последнее редактирование: 24 Июля 2009, 12:01:12 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Про pipe и fork - куда могут деваться данные?
« Ответ #1 : 23 Июля 2009, 08:08:00 »
Похоже.
На всякий случай посылаю примеры из книги Николая Иванова "Программирование в Linux".
В 23 - pipe,
в 24 - fifo,
в 25 - сокеты.
Там все рабочее.
PS. fifo применять удобнее чем pipe (более наглядно). Если не критично, то применяйте fifo.

Оффлайн wl

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Про pipe и fork - куда могут деваться данные?
« Ответ #2 : 24 Июля 2009, 13:35:48 »
Спасибо.
Но это не особо поможет - все, что там написано, я и так знаю и использовал.

Более низкоуровневая read так же себя ведет. Плюс, в манах сказано про флаг O_NONBLOCKING.

Ладно, пока я добился более-менее устойчивой работы, анализируя коды возврата (понадеемся на пунктуальность австрияков :) ). Доделывать не буду, т.к. появились новые веяния с глобализацией и централизацией.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Про pipe и fork - куда могут деваться данные?
« Ответ #3 : 24 Июля 2009, 14:17:20 »
Лучше подумайте, как обойтись вообще без написания всяких С программ.
Пробашить уже что есть.

Оффлайн wl

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Про pipe и fork - куда могут деваться данные?
« Ответ #4 : 24 Июля 2009, 14:27:26 »
Естественно, когда это все будет отдельным сервисом на отдельном сервере, работать будет питоний скрипт.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

 

Страница сгенерирована за 0.018 секунд. Запросов: 21.