execv 函数调用的参数无效
Invalid arguments for execv function call
程序应该做什么的示例:
./executable ls -l
应该和
一样
ls -l
所以基本上它是 shell 命令的无用解释器。
我创建了一个字符串 fullpath
,其中包含 /bin/commandname
和一个二维数组 arguments
,它基本上是 argv
,但没有前两个条目(是 executable
和 commandname
).
对于 ./executable ls -l
示例,它实际上 returns 以下内容:
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;
}
当我们修改以下行时,您的程序似乎可以正常运行:
char *arguments[argc-1];
你的 char ** 参数必须像这一行:
char *arguments[] = { "/bin/ls", "-l", NULL };
也就是说,不要忘记先指明命令;并确保将 NULL 放在字符 ** 的末尾。
祝你好运! ;)
程序应该做什么的示例:
./executable ls -l
应该和
一样ls -l
所以基本上它是 shell 命令的无用解释器。
我创建了一个字符串 fullpath
,其中包含 /bin/commandname
和一个二维数组 arguments
,它基本上是 argv
,但没有前两个条目(是 executable
和 commandname
).
对于 ./executable ls -l
示例,它实际上 returns 以下内容:
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;
}
当我们修改以下行时,您的程序似乎可以正常运行:
char *arguments[argc-1];
你的 char ** 参数必须像这一行:
char *arguments[] = { "/bin/ls", "-l", NULL };
也就是说,不要忘记先指明命令;并确保将 NULL 放在字符 ** 的末尾。
祝你好运! ;)