URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4503
[ Назад ]

Исходное сообщение
"перенаправление стандартного вывода в переменную"

Отправлено lemegeton , 23-Июл-05 21:17 
Всем привет! Функция system() направляет результат выполнения в стандартный вывод, т.е. на экран. Мне надо вернуть результат выполнения в переменную для манипуляций с ней. Как это сделать? Другими словами мне надо перенаправить стандартный вывод в определенную переменную. Прога на Си.

Содержание

Сообщения в этом обсуждении
"перенаправление стандартного вывода в переменную"
Отправлено chip , 23-Июл-05 22:21 
>Всем привет! Функция system() направляет результат выполнения в стандартный вывод, т.е. на
>экран. Мне надо вернуть результат выполнения в переменную для манипуляций с
>ней. Как это сделать? Другими словами мне надо перенаправить стандартный вывод
>в определенную переменную. Прога на Си.

popen() || (fork() && pipe())



"перенаправление стандартного вывода в переменную"
Отправлено lemegeton , 24-Июл-05 08:48 
>popen() || (fork() && pipe())

Спасибо. Работает...Еще вопрос -  а при организации канала, например канала на чтение, должен процесс с которым организуется канал, создавать канал на запись?


"перенаправление стандартного вывода в переменную"
Отправлено chip , 24-Июл-05 12:11 
>>popen() || (fork() && pipe())
>
>Спасибо. Работает...Еще вопрос -  а при организации канала, например канала на
>чтение, должен процесс с которым организуется канал, создавать канал на запись?

Не совсем понял до конца вопроса. Но ситуация такова, создается pipe после этого один из процессов закрывает дескриптор на запись (если предполагается что он будет читателем), а другой тогда закрывает дескриптор на чтение. Соотвественно, если первый писатель, то он закрывает на чтение, второй - на запись.



"перенаправление стандартного вывода в переменную"
Отправлено const , 28-Июл-05 23:03 
>при организации канала, например канала на
>чтение, должен процесс с которым организуется канал, создавать канал на запись?

Должен? Выбора нет :-)
pipe() создаёт трубу не "на чтение" или "на запись", а просто трубу. И отдаёт оба конца тебе.
popen() - обложка для fork() и pipe(), поэтому работает по тому же принципу.


"перенаправление стандартного вывода в переменную"
Отправлено Alexander S. Salieff , 29-Июл-05 22:44 
>>при организации канала, например канала на
>>чтение, должен процесс с которым организуется канал, создавать канал на запись?
>
>Должен? Выбора нет :-)
>pipe() создаёт трубу не "на чтение" или "на запись", а просто трубу.
>И отдаёт оба конца тебе.
>popen() - обложка для fork() и pipe(), поэтому работает по тому же
>принципу.

Тока есть один неприятный момент, что popen может только писать в процесс или только читать... А вот ежели охота и то и другой, то тока fork и перемапливать stdin stdout или чего там хочется от жизни...