首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个比:execlp更有效的方法( cmd[0],cmd[0],cmd[1] cmd[2],cmd[3] NULL);

一个比:execlp更有效的方法( cmd[0],cmd[0],cmd[1] cmd[2],cmd[3] NULL);
EN

Stack Overflow用户
提问于 2017-03-23 09:51:00
回答 1查看 167关注 0票数 0

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

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

代码语言:javascript
复制
execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3] NULL);
perror("Execlp");

例如,用户输入4个单词,每个单词都存储在:

代码语言:javascript
复制
cmd[0] cmd[1] cmd[2] cmd[3]

如果我们使用编译函数,即cc helloworld.c -o helloworld,这将需要数组cmd[]中的4个空间。

或者我们使用./helloworld

它将存储在cmd[0]中并运行它,这很好

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

代码语言:javascript
复制
execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3]. cmd[4], NULL);

代码语言:javascript
复制
execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3], cmd[4], cmd[5], cmd[6], NULL);
perror("Execlp");

有没有更有效的方法来做到这一点?通过使用exec()家族中的其他函数。

谢谢:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-23 10:12:22

那么使用execvp()呢?例如:

代码语言:javascript
复制
[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] #
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42972509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档