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

标签 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 编译函数 这将需要数组 cmd[]

内的 4 个空间

或者我们使用./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] #

关于c - 比 : execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3] NULL) 更有效的方法;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42972509/

相关文章:

c - x86_64 对齐堆栈并在不保存寄存器的情况下恢复

c - "error: expected ' ; ', ' , ' or ' ) ' before numeric constant"即将出现在我的代码中

在 C 中通过引用正确地将 char 数组和 char 指针传递给函数

将函数从用户空间复制到内核并执行

c - 为什么我的 Linux 应用程序每 0.5 秒停止一次?

c - 重复,但仍然使用标准输出

关闭链接系统中的管道 - Linux C 问题

linux - UNIX KSH 脚本中是否存在 "Goto"?

Bash 脚本语句

java - 如何使用java程序执行oraenv脚本?