перенаправление вывода execlp в файл - PullRequest
2 голосов
/ 27 июня 2011

Как перенаправить вывод execlp в файл? Например, я хочу перенаправить вывод execlp("ls", "ls", "-l", NULL) в выходной файл (скажем, a.txt).

Ответы [ 2 ]

5 голосов
/ 27 июня 2011

Вам нужно сделать что-то вроде этого:

int fd = open("output_file", O_WRONLY|O_CREAT, 0666);
dup2(fd, 1);
close(fd);
execlp("ls", "ls", "-l", (char *)0);
1 голос
/ 27 июня 2011

Самый простой способ сделать это - использовать freopen, чтобы открыть стандартный вывод для нового файла:

ФАЙЛ * freopen (const char * ограничение файла, const char * режим ограничения, ФАЙЛ * ограничить поток);

Из справочной страницы по fopen (которая включает freopen):

Функция freopen () открывает файл чье имя - указанная строка по имени файла и связывает с ним поток, на который указывает поток. Исходный поток (если он существует) закрыт. Аргумент режима является используется так же, как в функции fopen ().

Итак, в вашем случае, что-то вроде:

#include <stdio.h>
FILE *myStdOut;
myStdOut = freopen("a.txt", "rw", stdout);
if (myStdOut == NULL)
    // Error case, open failed

Подробности могут отличаться в зависимости от ОС, версии ОС и версии компилятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...