使用c程序中的选项执行命令

我正在尝试在c程序中执行带有参数的命令。 例如,当用户执行我的程序时: “./a.out ls -la” 该程序应该使用la选项执行ls。 但我不知道该怎么做。 我的程序使用fork。 我这样试试:
pid = fork();

if(pid == 0){

execvp(argv[1], &argv[2]);

}else{

wait(NULL);

}
但它不起作用。 我希望传递作为execvp数组的第二个参数,并在命令中传递args,但我对指针有点混淆(更多的是指针指针:s)。 我知道这不会起作用,因为参数很多,但即使我不使用破折号,程序也只启动'ls'而不用处理'la'选项。 如果有人可以帮助我,我会很高兴知道这样做的好方法。 谢谢。     
已邀请:
这里有几个问题。 你不处理
fork()
失败的情况。 你不处理
execvp()
失败的情况。如果你打印
strerror(errno)
它可能会告诉你为什么你的执行失败。 execvp()接受一个
char* const
数组,它必须有
NULL
作为最后一个元素。此外,第一个元素应该是程序的名称。这是一个约定,但它确实意味着,在您的示例中,参数是一个参数。即
ls
认为它是用
-la
命令调用的,没有参数。我不确定
argv[]
在结束后是否保证有一个
NULL
指针,所以不要直接使用它。例如
char* args[3];
args[0] = argv[1]; // You have already checked argc is at least three right?
args[1] = argv[2];
args[2] = NULL;
// do your fork and error check then in the child

int result = execvp(argv[1], args);
// if you get here exec failed, handle as appropriate
您需要检查
wait()
的退出值,并且您应该传递合法的
int
指针,以便您可以诊断任何问题。     
system
Quoth维基百科:   在C标准库中,system是用于执行子进程和命令的函数。它在stdlib.h头文件中定义。它与exec / spawn系列函数的不同之处在于,不是将参数传递给已执行对象,而是将单个字符串传递给系统shell,通常是POSIX shell,/ bin / sh -c。 http://en.wikipedia.org/wiki/System_(C_standard_library)     

要回复问题请先登录注册