Вот очень базовый c пример использования метода, о котором я спрашивал в комментарии:
#include <sys/types.h>
#include <sys/stat.h>
#include <assert.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main() {
int result = fork();
if(result == 0) {
int fd = open("test", O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
assert(fd >= 0);
int result = dup2(fd, STDOUT_FILENO);
assert(result != -1);
char * const argv[] = {"ls", NULL};
char * const env[] = { NULL };
result = execve("/bin/ls", argv, env);
assert(result != -1);
}
return 0;
}
Вам придется настроить его для своих нужд, но это сохранит результаты ls
в файле "тест". Хитрость в том, что dup2
заменяет стандартный дескриптор файла STDOUT_FILENO
копией дескриптора файла в наш недавно открытый файл, поэтому вывод ls
перенаправляется.
Я думаю, вы быть в состоянии использовать это, чтобы получить вывод от вашей команды.