一种比以下更有效的方法:execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3] NULL);
A more efficient way than: execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3] NULL);
我正在尝试制作一个命令行界面程序,它可以从用户输入中获取代码行并使用 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 space 数组 cmd[]
或者我们使用./helloworld
它将存储在 cmd[0]
和 运行 中,太棒了
但我假设如果有一个函数需要超过 4 个字,我的程序是否能够执行它们?答案可能是否定的,例如:如果有 5 个或更多单词,我不认为我的程序能够 运行 它除非在我的函数中它有 5 个元素可以工作
execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3]. cmd[4], NULL);
或
execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3], cmd[4], cmd[5], cmd[6], NULL);
perror("Execlp");
有没有更有效的方法来做到这一点?通过使用 exec()
系列中的其他功能。
谢谢:)
使用 execvp()
怎么样?例如:
[STEP 110] # cat execvp.c
#include <unistd.h>
int
main(int argc, char *argv[])
{
/* argv[argc] is always NULL */
execvp(argv[1], &argv[1]);
return 0;
}
[STEP 111] # gcc -Wall execvp.c
[STEP 112] # ./a.out echo 1
1
[STEP 113] # ./a.out echo 1 2
1 2
[STEP 114] # ./a.out echo 1 2 3
1 2 3
[STEP 115] #
我正在尝试制作一个命令行界面程序,它可以从用户输入中获取代码行并使用 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 space 数组 cmd[]
或者我们使用./helloworld
它将存储在 cmd[0]
和 运行 中,太棒了
但我假设如果有一个函数需要超过 4 个字,我的程序是否能够执行它们?答案可能是否定的,例如:如果有 5 个或更多单词,我不认为我的程序能够 运行 它除非在我的函数中它有 5 个元素可以工作
execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3]. cmd[4], NULL);
或
execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3], cmd[4], cmd[5], cmd[6], NULL);
perror("Execlp");
有没有更有效的方法来做到这一点?通过使用 exec()
系列中的其他功能。
谢谢:)
使用 execvp()
怎么样?例如:
[STEP 110] # cat execvp.c
#include <unistd.h>
int
main(int argc, char *argv[])
{
/* argv[argc] is always NULL */
execvp(argv[1], &argv[1]);
return 0;
}
[STEP 111] # gcc -Wall execvp.c
[STEP 112] # ./a.out echo 1
1
[STEP 113] # ./a.out echo 1 2
1 2
[STEP 114] # ./a.out echo 1 2 3
1 2 3
[STEP 115] #