落書きノート

ふと自分が気になった事を書いてます

C/C++ UNIX stderrorとperrorの使用例

#include "apue.h"
#include <errno.h>

int main(int argc, char *argv[]){
  fprintf(stderr, "EACCES: %s\n", strerror(EACCES));
  errno = ENOENT;
  perror(argv[0]);
  exit(0);
}

実行結果は以下のとおり。

> ./stderror_perror 
EACCES: Permission denied
./stderror_perror: No such file or directory

perrorにプログラム名を引数として渡している。argv[0]がそれを表している。この場合だと、stderror_perrorファイルが該当する。このようにすると、次のようにパイプの一部としてプログラムを使用した場合、3つのプログラムのどれが特定のエラーメッセージを生成したか判断出来る。

> program1 < inputfile | program2 | program3 > outputfile