Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比以下方法更有效:execlp(cmd[0],cmd[0],cmd[1]cmd[2],cmd[3]NULL);_C_Linux_Unix_Exec - Fatal编程技术网

比以下方法更有效:execlp(cmd[0],cmd[0],cmd[1]cmd[2],cmd[3]NULL);

比以下方法更有效:execlp(cmd[0],cmd[0],cmd[1]cmd[2],cmd[3]NULL);,c,linux,unix,exec,C,Linux,Unix,Exec,我正在尝试制作一个命令行界面程序,可以从用户输入中获取一行代码,并使用execlp执行它们 我想知道是否有更好的方法来编写我的代码 execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3] NULL); perror("Execlp"); 例如,用户输入4个单词,每个单词将存储在: cmd[0] cmd[1] cmd[2] cmd[3] 如果我们使用编译函数,它是cc helloworld.c-o helloworld 这将需要数组中的4个空间cmd[] 或者

我正在尝试制作一个命令行界面程序,可以从用户输入中获取一行代码,并使用execlp执行它们

我想知道是否有更好的方法来编写我的代码

execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3] NULL);
perror("Execlp");
例如,用户输入4个单词,每个单词将存储在:

cmd[0] cmd[1] cmd[2] cmd[3]
如果我们使用编译函数,它是
cc helloworld.c-o helloworld
这将需要数组中的4个空间
cmd[]

或者我们使用
/helloworld

它将被存储在
cmd[0]
中并运行它,非常好

但是我假设如果有一个函数需要超过4个字,我的程序能执行它们吗?答案可能是否定的,例如:如果有5个或更多的单词,我认为我的程序将无法运行它,除非在我的函数中有5个元素可以工作

execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3]. cmd[4], NULL);

有没有更有效的方法?通过使用
exec()
系列中的其他函数


谢谢:)

使用
execvp()怎么样?例如:

[步骤110]#cat execvp.c
#包括
int
main(int argc,char*argv[])
{
/*argv[argc]始终为空*/
execvp(argv[1],&argv[1]);
返回0;
}
[步骤111]#gcc-墙执行VP.c
[步骤112]#/a.输出回声1
1.
[步骤113]#/a.输出回声1 2
1 2
[步骤114]#/a.输出回声1 2 3
1 2 3
[步骤115]#

如何使用
execvp()
?例如:

[步骤110]#cat execvp.c
#包括
int
main(int argc,char*argv[])
{
/*argv[argc]始终为空*/
execvp(argv[1],&argv[1]);
返回0;
}
[步骤111]#gcc-墙执行VP.c
[步骤112]#/a.输出回声1
1.
[步骤113]#/a.输出回声1 2
1 2
[步骤114]#/a.输出回声1 2 3
1 2 3
[步骤115]#

为什么不使用
int execvp(const char*file,char*const argv[])
?嗯,我以前用过这个,但我不认为我真的理解它们,我会很快发布一个代码,我尝试过使用它们,当我使用它时,它只能接受argv中的一些值…
((char*args[]={cmd[0],cmd[1],NULL};execvp(cmd[0],args);peror(“Execp”);)
此代码仅适用于需要两个字的函数,例如
cc hw.c
rm hw.c
;如果我尝试
cc hw.c-o hw
这是4个字,它将不起作用。为什么不使用
int execvp(const char*file,char*const argv[])
?嗯,我以前用过这个,但我不认为我真的理解它们,我会很快发布一个代码,我尝试过使用它们,当我使用它时,它只能接受argv中的一些值…
((char*args[]={cmd[0],cmd[1],NULL};execvp(cmd[0],args);perror(“Execp”);)
此代码仅适用于需要两个单词的函数,例如,
cc hw.c
rm hw.c
;如果我尝试
cc hw.c-o hw
这是4个单词,它将不起作用,我知道有比我更好的方法,谢谢!解决我的好奇心!你能解释一下这是如何工作的,我已经测试过了函数内部没有int-argc(int-argc,char*cmd[])它仍能正常工作。有关详细信息,请参阅execvp的手册页,我的英语不太好。对于“int-argc“,不使用函数的arg不是错误。我知道有一种比我的更好的方法,谢谢!解决我的好奇心!你能解释一下这是如何工作的吗?我已经测试过函数中是否没有int argc(int argc,char*cmd[])它仍能正常工作。有关详细信息,请参阅execvp的手册页,我的英语不太好。对于“int argc”,不使用函数的arg不是错误。
execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3], cmd[4], cmd[5], cmd[6], NULL);
perror("Execlp");