首页 > 解决方案 > 为什么这两个 execvp 会产生不同的结果?

问题描述

我想知道为什么下面会产生不同的结果:

char *const temp[] = {"cal","4","2019",NULL};


    execvp(temp[0],temp);
    perror("Return from execlp not expected");
    exit(EXIT_FAILURE);

执行时将生成一个只有 4 月的日历

char *const temp[] = {"cal"};
char *const temp2[] ={"4","2019",NULL};

    execvp(temp[0],temp2);
    perror("Return from execlp not expected");
    exit(EXIT_FAILURE);

执行时将生成一个包含所有月份的日历

我想让第二种形式正常工作,至于我的问题,我有 2 个数组,一个用于存储我的所有命令,另一个用于存储我的所有命令参数。例如

array1[0] = command
array2[0] = arg1 ar2 arg3  // the arguments for the command in array1[0]

在一个循环中,直到我到达命令数组的末尾,使用 fork 并在子类中执行这些命令,以便我可以遍历并执行数组中的所有命令。

标签: cposix

解决方案


根据execvp 人

int execvp(const char *file, char *const argv[]);

execv()、execvp() 和 execvpe() 函数提供了一个指向以 null 结尾的字符串的指针数组,这些字符串表示新程序可用的参数列表。按照惯例,第一个参数应该指向与正在执行的文件关联的文件名。 指针数组必须以 NULL 指针终止


推荐阅读