我的代码有问题。当我要运行它时,它会告诉我“没有档案”
#include <string.h>
#include <stdio.h>
main (argc, argv)
char *argv[];
{
int fd;
extern int errno;
if (argc < 2) {
fprintf (stderr, "No file\n");
exit(1);
}
if ((fd = creat(argv[1], 0777))< 0){
fprintf(stderr,"Cannot create file %s\n", argv[1]);
exit(1);
}
switch (fork()) {
case -1:
fprintf(stderr, "Fork error\n");
exit(1);
case 0:
close(1);
dup(fd);
close(fd);
execl("/bin/ls", "ls", NULL);
perror("Exec");
break;
default:
wait(0);
close(fd);
}
exit(0);
}
并将发出“警告:内置函数'不兼容隐式声明'退出'” - 对于所有5退出。
答案 0 :(得分:2)
您面临两个不同的问题:
当您运行程序时,它会显示&#34; No File&#34;
这是因为当你调用程序时,你没有在命令行上提供文件名,因此argc
是1,因此是消息。
编译时会收到警告:
incompatible implicit declaration of built-in function 'exit'
这是因为您没有包含<stdlib.h>
,其中包含exit
的声明。
由于缺少<unistd.h>
,<fcntl.h>
和<wait.h>
,您还应该收到更多警告。
<小时/> 旁注
您声明extern int errno;
(不使用btw)。不应该这样做,你应该包括。
<小时/> 旁注2
你应该考虑&#34;隐含声明&#34;警告为错误。