The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Вопрос по реализации функции p2open под Linux"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Вопрос по реализации функции p2open под Linux"
Сообщение от balder emailИскать по авторуВ закладки on 12-Авг-03, 15:54  (MSK)
На solaris и irix есть функция p2open библиотеки libgen. Эта функция возвращает сразу два указателя типа FILE на  входной и выходной потоки forked процесса. В linux нет такой функции. Возможно только использование только popen. Но использование popen не позволяет объединить входной и выходной потоки для дочернего процесса.
Может у кого-нибудь есть идеи как реализовать p2open под linux?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Вопрос по реализации функции p2open под Linux"
Сообщение от Soldier Искать по авторуВ закладки on 12-Авг-03, 17:09  (MSK)
>На solaris и irix есть функция p2open библиотеки libgen. Эта функция возвращает
>сразу два указателя типа FILE на  входной и выходной потоки
>forked процесса. В linux нет такой функции. Возможно только использование только
>popen. Но использование popen не позволяет объединить входной и выходной потоки
>для дочернего процесса.
>Может у кого-нибудь есть идеи как реализовать p2open под linux?

man pipe, man fdopen ;-)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Вопрос по реализации функции p2open под Linux"
Сообщение от balder Искать по авторуВ закладки on 13-Авг-03, 01:49  (MSK)

>man pipe, man fdopen ;-)

ну... читал..., а по существу че-нить сказать?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Вопрос по реализации функции p2open под Linux"
Сообщение от Soldier Искать по авторуВ закладки on 13-Авг-03, 06:48  (MSK)
>
>>man pipe, man fdopen ;-)
>
>ну... читал..., а по существу че-нить сказать?

А может программу за вас еще написать? Голова она ведь не только, чтобы есть :)))
Для небольших объемов передаваемых/получаемых данных пойдет следуюший вариант:

Создать 2 пары дескрипторов в родителе перед запуском потомка - pipe(fd1);pipe(fd2);В потомке close(fd1[1]); close(fd2[0]);  В родителе close(fd1[0]); close(fd2[1]); Теперь все что пишем в fd1[1] родителя, можно прочитать через fd1[0] потомка, все что пишем в fd2[1] потомка, можно прочитать через fd2[0] родителя. Далее по желанию в родителе fdopen(fd1[1],"w"); fdopen(fd2[0],"r"); Если надо запустить внешнюю прогу и читать/писать ее stdout/stdin, то можно в потомке dup2(fd2[1],STDOUT_FILENO); dup2(fd1[0],STDIN_FILENO), затем вызвать exec.

У меня эта схема сработала только при небольшом количестве передаваемых/получаемых данных, почему - не знаю, а копаться лень.

sas,vpn,XMan,RomanSa и другие - может вы знаете? :)))

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру