2016-04-14 15 views
0

私はこのコードに問題があります。すべての5の出口のために - :私はつもりとき、それは「いいえファイル」Cコードでエラーが発生しました。 "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); 
} 

私を見るんだろうと、「組み込み関数 『EXIT』の互換性がない暗黙的な宣言の警告」を出します、それを実行します。

+3

」を含むのを忘れた –

+0

私は主な宣言を理解できません。 –

+1

@MartinJamesそれはK&Rの宣言です。完璧です。 – fuz

答えて

2

次の2つの異なる問題に直面している:

あなたはそれが「いいえファイル」

あなたがプログラムを起動するとき、これは、あなたがファイルを供給されていないされているため、表示されていないプログラムを実行するとコマンドライン上の名前であるので、argcは1であり、したがってメッセージです。

あなたが警告を受ける:incompatible implicit declaration of built-in function 'exit'あなたはexitの宣言を含む<stdlib.h>が含まれていなかったので、これは

をコンパイルするとき。

また、<unistd.h>,<fcntl.h><wait.h>が含まれていないため、警告が表示されるはずです。


サイドノート

あなたは(ところで使用せずに)extern int errno;を宣言します。これを行う代わりに、あなたが含めるべきです。


サイドノート2

あなたはエラーとして "暗黙の宣言" の警告を考慮すべきです。

+1

... '' ... – EOF

+0

「argcは1」で、ファイルが表示されないのはなぜですか? – user6200539

+0

@ user6200539これを読んで[SOの記事](http://stackoverflow.com/questions/3024197/what-does-int-argc-char-argv-mean)。 –

関連する問題