Использовать execvp с входным файлом для программы и перенаправить вывод в новый файл - PullRequest
0 голосов
/ 12 декабря 2018

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

В моей программе я пытаюсь запустить программу, используя текстовый файл в качестве входных данных и перенаправляя вывод программы в новый файл.

Вот мой код:

if (fork() == 0) {
    char *args[]={"program",">","output.txt",NULL}; 
    int fd = open("/input.txt", O_RDONLY);
    dup2(fd, 0);
    execvp("program",args);

    return 0;
}

program.c - это моя программа, которую я пытаюсь запустить (не моя основная программа) /input.txt - это файл, который я хочу использовать в качестве ввода для моего program.c, а output.txt - это файл, который я хочу перенаправить на выходпрограммы, чтобы я знал, что для перенаправления вывода моей программы я должен использовать programname>outputfile.

Но я не могу заставить его работать, я думаю, что я что-то не так делаю с args array.Как правильно отправить input.txt в качестве ввода для program.c и перенаправить его вывод на output.txt?(обратите внимание, что моя основная программа не program.c)

Любая помощь будет оценена

1 Ответ

0 голосов
/ 12 декабря 2018

Использование programname>outputfile - особенность оболочки.Оболочка открывает для вас выходной файл и дублирует дескриптор файла на 1 (stdout).

Если вы не хотите запускать оболочку, вы можете сделать это как перенаправление ввода с open и dup2 перед звонком exec*.Попробуйте что-то вроде этого:

int fdOut = open("output.txt", O_WRONLY | O_CREAT);
/* don't forget to check fdOut for error indication */
int rc = dup2(fdOut, 1);
/* also check the return code for errors here */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...