C代码出错。会出现“没有档案”

时间:2016-04-14 11:48:03

标签: c

我的代码有问题。当我要运行它时,它会告诉我“没有档案”

#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退出。

1 个答案:

答案 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;警告为错误。