LINUX.ORG.RU

Объединить два PIPE-а в Linux для синхронного чтения

 , ,


0

1

Доброго времени суток, товарищи!

Есть две команды, которые выдают на stdout бесконечный бинарный поток. В моем приложении на python необходимо читать оба потока с буфером N байт, и обрабатывать пары буферов. Т.е. я не могу обработать N байт от одного потока, не получив N байт другого. Получил пару - отбросил пару.

Вопрос: при таких условиях объединять потоки проще в python или какими-то средствами linux? Что бы, например, читать результирующий поток буферами по 2N байт и всякий раз получать первые N-байт от одного и последние - от второго.

Если N маленькое (умещается в размер системного буфера), то достаточно просто последовательно читать buf1 = fd1.read(N); buf2 = fd2.read(N).

Если N большое, то считывать оба дескриптора при помощи цикла из select/poll и read.

NeXTSTEP ★★
()

Тебе нужна машина состояний ака конечный автомат. Как будет при этом организованно i/o до тех пор пока ты знаешь какой байт откуда - вопрос второстепенный.

Но в общем и целом про select/epoll я бы удвоил.

pon4ik ★★★★★
()

Псевдокод


mkfifo pipe1
mkfifo pipe2
(comand1 > pipe1) &
(comand2 > pipe2) &

fd1=open("pipe1")
fd2=open("pipe2")
while(1){
  read(fd1,buf1,N)
  read(fd2,buf2,N)
  process(buf1,buf2)
}

anonymous
()

Вы сговорились? 3-й человек за неделю с такой задачей.

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