perrorを使う

perrorを使って、エラーメッセージを簡単に表示させてみます。

man 3 perrorの冒頭。

PERROR(3)                  Linux Programmer's Manual                 PERROR(3)

名前
       perror - システムエラーメッセージを出力する

書式
       #include <stdio.h>

       void perror(const char *s);

       #include <errno.h>

       const char * const sys_errlist[];
       int sys_nerr;
       int  errno; /* 実際にこのように宣言されているわけではない。 errno(3) 参照 */


引数に指定する文字列は、エラーが発生した関数に使用した文字列を使えば、たいてい上手くいきます。

statでエラーが出た時のメッセージをperrorで表示するプログラムです。

takk@deb9:~/tmp$ cat -n test.c
     1	#include <sys/types.h>
     2	#include <sys/stat.h>
     3	#include <unistd.h>
     4	#include <stdio.h>
     5	#include <errno.h>
     6	
     7	int main(int argc, char* argv[])
     8	{
     9		struct stat buf;
    10		char* filename;
    11		filename = argv[1];
    12	
    13		if(stat(filename,&buf) == -1){
    14			perror(filename);
    15		}
    16		return 0;
    17	}
takk@deb9:~/tmp$ 

ビルド。そして、存在するファイルをパラメータで与えて、成功するパターンの確認。

takk@deb9:~/tmp$ gcc test.c
takk@deb9:~/tmp$ ./a.out test.c
takk@deb9:~/tmp$ 

perrorの処理は通らないパターンなので、何も出ませんでした。

次は、存在しないファイルにアクセスしてみます。file1.txtという存在しないファイルを指定しますが、本当に存在しないかlsで確認。

takk@deb9:~/tmp$ ls file1.txt
ls: 'file1.txt' にアクセスできません: そのようなファイルやディレクトリはありません
takk@deb9:~/tmp$ 

ありませんでした。
では、パラメータで与えてみます。

takk@deb9:~/tmp$ ./a.out file1.txt
file1.txt: No such file or directory
takk@deb9:~/tmp$ 

エラーメッセージが表示されました。
よく見慣れてるやつですね。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA