**首先
函数原型与头文件
#include <unistd.h>
int execve(const char *filename, char *const argv[],
char *const envp[]);
我所遇见的错误以及解决办法
错误 | 解决 |
---|---|
明明路径正确,文件名正确,但无法调用 | 检查一下filename结尾是否多空格 |
可以调用程序,但就是无法执行参数 | 注意参数的格式,在execve的man手册中有如下的一段示例代码 |
/* execve.c */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int
main(int argc, char *argv[])
{
char *newargv[] = { NULL, "hello", "world", NULL };
char *newenviron[] = { NULL };
if (argc != 2) {
fprintf(stderr, "Usage: %s <file-to-exec>\n", argv[0]);
exit(EXIT_FAILURE);
}
newargv[0] = argv[1];
execve(argv[1], newargv, newenviron);
perror("execve"); /* execve() returns only on error */
exit(EXIT_FAILURE);
}
char *newargv[] = { NULL, “hello”, “world”, NULL };
按照这个格式来设置的你的参数就没有问题了。
默认情况下,newargv[0]会被系统设置成你所调用程序的名字.