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
的返回值以确保它成功?