fexecve未按预期运行

fexecve未按预期运行,c,execve,C,Execve,因此,据我所知,fexecve类似于execve,只是它采用文件描述符而不是路径。 下面是我的代码,它不起作用:/ \define\u DEFAULT\u源 #包括 #包括 #包括 int main(){ int fd=打开(“测试”,仅限Ordu); printf(“文件:%d\n”,fd) fexecve(fd,NULL,NULL); } 下面是测试: #包括 int main(){ 系统(“mkdir pls”); } 有什么想法吗?如文件所述: Errors are as for

因此,据我所知,
fexecve
类似于
execve
,只是它采用文件描述符而不是路径。 下面是我的代码,它不起作用:/

\define\u DEFAULT\u源
#包括
#包括
#包括
int main(){
int fd=打开(“测试”,仅限Ordu);
printf(“文件:%d\n”,fd)
fexecve(fd,NULL,NULL);
}
下面是
测试

#包括
int main(){
系统(“mkdir pls”);
}

有什么想法吗?

如文件所述:

  Errors are as for execve(2), with the following additions:

  EINVAL fd is not a valid file descriptor, or argv is NULL, or envp is NULL.
不能为参数传递NULL。相反,请尝试以下方法:

int
main(void) 
{
    int fd = open("test", O_RDONLY);
    char *env[] = { NULL };
    char *argv[] = { "test", NULL };
    fexecve(fd, argv, env);
    perror("fexecve");
    return EXIT_FAILURE;
}

test
看起来像c源代码
fexecve
要求在可执行文件上打开文件描述符。是的,我说的是
test.c
,它是
test
(编译版本duh)的源文件,你说的
test.c
?你是想粗鲁吗?不抱歉,但我想很明显,这是二进制文件的源文件。很明显,如果你将NULL作为第二个或第三个参数传递,fexecve将失败,因此…在添加必要的
\include
s之后,它仍然给出一个
无效参数。如果您的文件
test
不在您认为的位置,可以测试
open
的返回值以确保它成功?