выполнение команды и получение o / p для переменной - PullRequest
0 голосов
/ 07 июля 2011

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

Ответы [ 4 ]

1 голос
/ 07 июля 2011

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

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

1 голос
/ 07 июля 2011

Нет, <a href="http://linux.die.net/man/3/popen" rel="nofollow">popen()</a> не сохраняет вывод в файл. Он указывает stream , который может представлять для файла на диске, но который также может быть, например, на. труба или розетка. Потоки более абстрактны, чем файлы.

Чтобы иметь трубу, вы бы открыли трубу, например, используя <a href="http://linux.die.net/man/2/pipe" rel="nofollow">pipe()</a> и затем вызовите <a href="http://linux.die.net/man/3/fdopen" rel="nofollow">fdopen()</a> на правильном конце полученной трубы.

0 голосов
/ 07 июля 2011

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

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

0 голосов
/ 07 июля 2011

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

...