Единственная часть, в которой я пока запутался, это как настроить execv с первым параметром в качестве текущего рабочего каталога. Я пробовал оба "." и "~", ни один из них не выполняет ничего на экране; то же самое для "/." и "/~". Я не понимаю, как запустить execv примерно так:
$ ./prog ls -t -al
И пусть он выполняет команды после выполнения программы (которые хранятся в argv) в текущем каталоге или в том же каталоге, в котором находится файл (который будет зависеть от того, кто его использует).
Мой код:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
void main(int argc, char *argv[])
{
int pid;
int count = 0;
char *argv2[argc+1];
for(count = 0; count < argc-1; count++){
argv2[count] = argv[count+1];
printf("Argv2: %s\n", argv2[count]); //just double checking
argv2[argc-1] = NULL;
}
pid = fork();
if(pid == 0){
printf("Child's PID is %d. Parent's PID is %d\n", (int)getpid, (int)getppid());
execv(".", argv2); //<---- confused here
}
else{
wait(pid);
exit(0);
}
}
Некоторый пример вывода:
$ ./prog ls -t -al
Argv2: ls
Argv2: -t
Argv2: -al
Child's PID is 19194. Parent's PID is 19193