LINUX.ORG.RU

Работает ли flex через pipe - потоки?


0

0

Столкнулся с проблемой: имеется препроцессор, написанный на flex-е.
Также имеется основной сканер тоже написанный на flex-е. Если запускать их
последовательно - сначала отрабатывает препроцессор и пишет во временный файл,
затем - основной сканер читает из файла - то проблем нет.
Хотел избавиться от временных файлов и запускать их в отдельных потоках
с развязкой ввода-вывода через pipe или fifo - ни то ни другое не работает.
В частности, основной сканер говорит
--(end of buffer or a NUL)

Поэтому вопрос: а может ли вообще flex работать с потоком,
организованным через канал или fifo?

Flex через файловые потоки работает. Если можно сделать fdopen() на результат pipe() - должен работать... Другое дело что "The result of applying fdopen to a shared memory object is undefined".

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

Таки заработал - на ка-то странно. Кто бы просветил на счет
особенностей использования pipe-ов.
Как это выглядит:
- создается pipe (два дескриптора - на чтение и запись)
- создается тред препроцессора. Препроцессор пишет в дескриптор записи
- основной сканер устанавливается на десриптор чтени - чере fdopen
- Тут он сначала говорит "--(end of buffer or a NUL)" - при включенной %option debug - ессно
После этого - молчок.
И вот здесь нечто интересное: если препроцессор закрывает поток записи
то основной сканер начинает работать нормально... Причем, flush в
препроцессоре не помогает - нужно именно _ЗАКРЫВАТЬ_ дескриптор.

Так что - хотелось бы знать - в чем дело и как надо...

Flogger_d
() автор топика
Ответ на: комментарий от anonymous

Все разобрался... Работает... Просто после создания и запуска пишущего потока в читающем потоке нужно закрыть дескриптор записи. Примерно так...
В общем - рассосалось...

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