0

I have problem with this code. When I gonna run it it'll show me "No File"

#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);
}

and will put out "warning: incompatible implicit declaration of built-in function 'exit'" - for all 5 exit.

user6200539
  • 3
  • 1
  • 2

1 Answers1

2

You are facing two distinct problems:

When you run the program it displays "No File"

This is because when you invoke the program, you aren't supplying a file name on the commande line, therefore argc is 1, hence the message.

You get the warning: incompatible implicit declaration of built-in function 'exit' when you compile

This is because you didn't include <stdlib.h> which contains the declaration of exit.

You should also get more warnings due to the lack of including <unistd.h>, <fcntl.h> and <wait.h>.


Side note

You declare extern int errno; (without using btw). Instead of doing this, you should include .


Side note 2

You should consider "implicit declaration" warnings as errors.

Jabberwocky
  • 48,281
  • 17
  • 65
  • 115