サンプル・ソースを最初に眺めたときに
perror("cannot open file");
などという記述を目にすると
printf("cannot open file\n");
とどのように違うのかと思うことがあるかも知れない。
printf の場合は 単なる標準出力 であるがperror は システム・エラー・メッセージを伴う
エラー・メッセージ である。
例えばファイル・オープンに失敗した場合、単に
printf("cannot open file\n");
では真の原因が不明である。
- オープンするファイルが見つからない
- ファイル名の指定が正しくない。
- ファイルをオープンする権限が無い。
などと原因はさまざまであるからである。
このようなときには
perror("cannot open file");
と perror を使って記述しておくと
cannot open file ファイルが見つかりません。
のようにシステムからのメッセージを伴って出力することができるので、真の原因を直ちに知ることができる。
このように perror が有効であることを知るともう少しユーザーでメッセージを書式化して出力したくなる。
つまり「ファイルが見つかりません。」というシステム・メッセージだけを取り出したい要求が出てくる。
例えば標準出力ではなくPCクライアントにエラーの内容を送信したい場合などがその例である。
このような場合には strerror(errno) によってシステム・エラー・メッセージだけを取り出すこと
ができる。ただしシステム・エラー・メッセージは CPFxxxx という例の詳細なメッセージではないことに注意。
下記に使用例を示す。
0001.00 #include <stdio.h> 0002.00 #include <stdlib.h> 0003.00 #include <string.h> 0004.00 #include <errno.h> 0005.00 0006.00 #define TRUE 0 0007.00 #define FALSE -1 0008.00 0009.00 void main(void){ 0010.00 FILE *stream; 0011.00 char buff[132]; 0012.00 0013.00 if((stream = fopen("QGPL/MYFILE", "r")) == NULL){ 0014.00 sprintf(buff, "ERR%d = %s\n", errno, strerror(errno)); 0015.00 printf("%s\n", buff); 0016.00 } 0017.00 getchar(); 0018.00 }
【 解説 】
この例では
ERR3101 = 回復可能でない入出力エラーが起こった
と出力される。