execv函数调用的参数无效

时间:2015-04-05 20:28:17

标签: c execv

该计划应该做的一个例子:

./executable ls -l

应与

相同
ls -l

所以基本上它是shell命令的无用解释器。

我创建了一个字符fullpath,其中包含/bin/commandname和一个二维数组arguments,基本上是argv但没有前两个条目(是executablecommandname)。

对于./executable ls -l示例,它实际上返回以下内容:

full path: /bin/ls
Argument 0: -l

这是正确的,但execv几乎没有。

我该如何解决这个问题?

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char** argv){

    char path[6] = "/bin/";
    char* fullpath = (char*)malloc(strlen(path)+strlen(argv[1]));
    strcat(fullpath, path);
    strcat(fullpath, argv[1]);
    printf("full path: %s\n", fullpath);

    char *arguments[argc-1];
    int i;
    for(i=0; i<argc-2; i++){
        arguments[i] = (char*)malloc(strlen(argv[i+2]));
        strcpy(arguments[i], argv[i+2]);
        printf("Argument %d: %s\n", i, argv[i+2]);
    }

    execv("/bin/ls", arguments);

    return 0;
}

1 个答案:

答案 0 :(得分:2)

当我们修改以下行时,您的程序似乎正常运行:

char *arguments[argc-1];

你的char **参数必须像这一行:

char *arguments[] = { "/bin/ls", "-l", NULL };

换句话说,别忘了先说明命令;并确保在char **的末尾加上NULL。

祝你好运! ;)