довольно новичок в Linux, и я пытаюсь читать аргументы командной строки в операционной системе Linux. Я хочу иметь возможность программно выполнять команды, которые я даю в качестве аргументов командной строки. Вот что у меня есть до сих пор:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
int counter;
for(counter = 1; counter < argc; counter++){
pid_t pid = fork();
if(pid < 0)
{
perror("Forking failed");
exit(1);
}
else if(pid == 0)
{
char *args[] = {argv[counter], NULL};
printf("Argument to be passed: %s \n", argv[counter]);
execvp(args[0], args);
perror("Command failed.");
exit(0);
}
printf("Process %s completed successfully.\n", argv[counter]);
}
exit(0);
}
Мой вывод на терминале:
darren@darren-VirtualBox:~/Desktop$ ./cmdarguments /home/darren/Desktop/fullpathdoc1 /home/darren/Desktop/fullpathdoc2
Process /home/darren/Desktop/fullpathdoc1 completed successfully.
Process /home/darren/Desktop/fullpathdoc2 completed successfully.
darren@darren-VirtualBox:~/Desktop$ Argument to be passed: /home/darren/Desktop/fullpathdoc2
This is the second program that simply prints this statement.
Argument to be passed: /home/darren/Desktop/fullpathdoc1
This is the first program that simply prints this statement.
Я хочу иметь возможность распечатать имя процесса и сказать, что процесс завершен после успешного выполнения каждого аргумента командной строки. По какой-то причине мой вывод приводит к тому, что все, кажется, выполняется в обратном порядке, причем сообщения о завершении моего процесса появляются первыми, а также читаются в командных строках справа налево. Может кто-нибудь помочь с моим кодом и как я могу это исправить?