在c中使用execlp和多个参数作为字符串运行linux命令

在c中使用execlp和多个参数作为字符串运行linux命令,c,linux,operating-system,system-calls,C,Linux,Operating System,System Calls,我试图在C中使用带有多个参数的系统调用运行ls,例如-l-a。参数及其数量随用户输入的不同而变化。输入是串联的“-l”+“-a”==“-l-a”。我使用的代码是: execlp("ls","ls",arguments,NULL) //arguments = "-l -a" 用户输入来自终端: -l -a 如果要执行多个参数,则应使用execvp()而不是execlp #include<stdio.h> #include <unistd.h> int main(int

我试图在C中使用带有多个参数的系统调用运行
ls
,例如-l-a。参数及其数量随用户输入的不同而变化。输入是串联的“-l”+“-a”==“-l-a”。我使用的代码是:

execlp("ls","ls",arguments,NULL) //arguments = "-l -a"
用户输入来自终端:

-l
-a

如果要执行多个参数,则应使用
execvp()
而不是
execlp

#include<stdio.h>
#include <unistd.h>
int main(int argc,char *argv[])
{

        execvp(argv[1],argv+1);// argv+1 means whatever arguements after argv[1] it will take & executes it 
        return 0;
}

我希望它能有所帮助。

如果要执行多个参数,那么应该使用
execvp()
而不是
execlp

#include<stdio.h>
#include <unistd.h>
int main(int argc,char *argv[])
{

        execvp(argv[1],argv+1);// argv+1 means whatever arguements after argv[1] it will take & executes it 
        return 0;
}

我希望这会有帮助。

需要逐一传递参数。否则,它将被解释为单个参数。因此,如果
参数
字符串是某种输入,则需要将其拆分。(实际上)不可能使用
execlp
,而是使用where来传递字符串数组(以空指针终止)。@Someprogrammerdude我想你可以把它作为一个答案,因为使用
execvp
正是正确的解决方案。顺便说一句,
null
是错误的,它一定是
(char*)空
。(甚至Linux手册页也对此进行了详细说明)。@AnttiHaapala(char*)NULL和NULLL@KarinaK
(char*)NULL
是类型为
char*
的表达式,
NULL
是一个实现定义类型的表达式,没有人知道它在varargs函数中是如何工作的。需要逐个传递参数。否则,它将被解释为单个参数。因此,如果
参数
字符串是某种输入,则需要将其拆分。(实际上)不可能使用
execlp
,而是使用where来传递字符串数组(以空指针终止)。@Someprogrammerdude我想你可以把它作为一个答案,因为使用
execvp
正是正确的解决方案。顺便说一句,
null
是错误的,它一定是
(char*)空
。(甚至Linux手册页也对此进行了详细说明)。@AnttiHaapala(char*)NULL和NULLL@KarinaK
(char*)NULL
是类型为
char*
的表达式,
NULL
是实现定义类型的表达式,没有人知道它在varargs函数中是如何工作的。execvp(argv[2],argv+1);这里argv[2]是ls作为argv,argv+1是-l,但是我没有得到任何输出到终端。我从argv[2]开始,因为argv[1]代表的是program@KarinaK那么,对于argv[1],您给出了什么?对于程序前一部分中的计数器。例如,输入为./a.out used_参数ls-lokay,然后可以按照建议使用,但首先需要执行增量argv。你想同时执行“used_arguement”和“ls-l”吗?@KarinaK你得到了吗?什么是“used_argument”,它是“ls”的另一个参数吗?execvp(argv[2],argv+1);这里argv[2]是ls作为argv,argv+1是-l,但我没有得到任何到终端的输出。我从argv[2]开始,因为argv[1]是为了世界的另一面program@KarinaK那么你给argv[1]的是什么呢?对于程序前一部分中的计数器。例如,输入是./a.out used_argument ls-lokay,那么你可以按照你的建议使用,但首先你需要执行增量argv。你想同时执行“used_argument”和“used_argument”吗ls-l?@KarinaK你有吗?什么是“used_参数”,它是“ls”的另一个参数吗?