Я пытаюсь прочитать ввод из определенного файла и записать его в определенный файл с помощью unix (sys calls). выходная часть должна быть каким-то образом создана.пытается перенаправить ввод и вывод с использованием системных вызовов
я хочу сделать что-то вроде следующего: ./a.out < input.txt> output.txt используя только эти функции: вилки, dup.dup2, EXEC, открытым, писать, читать код это:
pid_t pid, runner;
char *path = argv[1];
char enter[] = "/home/demo/Desktop/OS/Ex1/Ex12/code/input.txt";
char to[] = "/home/demo/Desktop/OS/Ex1/Ex12/Ex1/ronen/";
char *out = "/home/demo/Desktop/OS/Ex1/Ex12/Ex1/ronen/out1.txt";
char *args[] = {to, "./a.out","<",enter,">",out, NULL};
char *args2[] = {"cd", to, "./a.out","<",enter,">",to ,NULL};
if ((runner = fork()) < 0) {perror("could not make fork");}
else if (runner == 0) {
printf("true\n");
execvp(args2[0],args2);
} else if (runner != 0) {
waitpid(runner,0,0);
printf("done\n");
}
Так что это действие, когда я помещаю файл «a.out» на рабочий стол.
однако кто-нибудь знает, как я могу перенаправить функцию exec, чтобы перейти в мою специальную папку? поэтому мне не придется передавать исполняемый файл на рабочий стол?
Вы не понимаете понятия 'shell' и' syscall'. Сначала вы должны попытаться лучше понять, что такое системные вызовы и что делает оболочка перед написанием кода. Например, вы пытаетесь передать командную строку оболочки в ядро. Это бессмыслица, оболочка ** отвечает за перевод командной строки в правильные аргументы в последовательность fork/exec. – fjardon
Ваш вопрос: * Как написать программу, в которой запускается вторая программа, чей стандартный ввод и вывод перенаправляются на файлы? * – fjardon