【发布时间】:2018-05-08 00:35:18
【问题描述】:
我试图了解 execl 在尝试启动不存在的文件时返回的错误。
这是我的实验代码,main 调用了 spawn1 函数,该函数将创建 fork 并尝试启动 execl:
# include <stdio.h>
# include <assert.h>
# include <sys/types.h>
# include <sys/wait.h>
# include <unistd.h>
# include <stdlib.h>
int spawn1(char *, char *, char *);
int main(){
int i, t, tt, state;
for(i = 0; i < 10; i++){
t = spawn1("functiondoesntexist", "strange name", "argument");
if (t < 0){
perror("fork"); // fork error
break;
}
tt = wait(&state);
assert(tt == t);
if (state != 0){
perror("exec didn't work");
break;
}
}
return i != 10;
}
int spawn1(char * file, char * command, char * arg){
int t;
t = fork();
if (t < 0) // fork error
return -1;
if (t == 0){ // child
execl(file, command, arg, (void *)0);
exit(1);
}
// parent
return t;
}
返回的错误是:
exec didn't work: File exists
为什么不是更像“文件不存在”?
【问题讨论】: