これまでのところ私が混乱している唯一の部分は、現在の作業ディレクトリとして最初のパラメーターを使用して 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