2011-07-07 5 views
0

popen хранит о/р указанной команды в файле. Как получить аналогичную функциональность, но o/p в переменную (т. Е. В char *)?Выполнение команды и получение o/p переменной

+0

Посмотрите этот вопрос (довольно много, ваш дубликат): http://stackoverflow.com/questions/219138/get-command-output-in-pipe-c-for-linux –

+0

@Aleks: Sorry , это не то, о чем я прошу здесь. – hari

ответ

1

Я не мог найти ничего, что возвращает o/p в переменной. Это имеет смысл, так как некоторые команды «o/p» могут быть большими, поэтому для обеспечения согласованности поведения o/p сохраняется в файле. Я на самом деле закончил чтение из файла, возвращенного popen.

Спасибо за помощь.

0

вы можете заменить STDOUT и STDERR для запущенной команды с потоком, который вы контролируете

1

Нет, popen() не сохраняет вывод в файл. Он указывает поток , который может представлять файл на диске, но который также может быть, например, на диске. трубы или гнезда. Потоки более абстрактны, чем файлы.

Чтобы иметь трубу, вы можете открыть трубу, используя, например, pipe(), а затем наберите fdopen() на соответствующем конце полученной трубы.

+0

Спасибо. То, что я хочу сделать, - это выполнить очень простую вещь, то есть «wc -l имя_файла» и сохранить o/p в переменной/буфере. Возможное? – hari

0

Вы хотите запустить команду unix из программы на C и сохранить выход?

Если это так, то последовательность должна вызвать FILE* pipe = popen("wc -l filename", "r");, а затем читать из ФАЙЛА * pipe так же, как вы читали бы из файла, открытого с помощью fopen. То есть вы используете такие функции, как fgets или fscanf, чтобы читать результат так же, как если бы результат команды находился в файле.

Смежные вопросы