到目前为止,我唯一感到困惑的部分是如何使用第一个参数设置execv作为当前工作目录。我已经尝试了两个“。”和“〜”,既不向屏幕执行任何操作;同“/”。和“/〜”。我如何有execv运行这样的困惑:
$ ./prog LS -t -al
而且有它在当前目录下执行程序后,执行的命令(其存储到的argv) ,或同一目录中的文件是(这将基于谁在使用它而改变。)
我的代码:
使用execv(C语言)从linux命令提示符运行命令
#include
#include
#include
#include
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); //
}
else{
wait(pid);
exit(0);
}
}
一些样本输出:
$ ./prog LS -t -al
Argv2:LS
Argv2:-t
Argv2:-al
孩子的PID是19194.家长的PID为19193
2012-09-25
Baelix
+0
我会建议您提高设置为“编译器警告”。它应该告诉你从main返回int。在我的系统上,它也抱怨缺少#include 。并等待一个整数指针作为参数,而不是整数。 –