こんにちは、もがちゃんです。
今回は、C言語でエラーが発生した時、発生したエラー(errno)に対応するメッセージを取得する際に使用するstrerrorの使い方を簡単なサンプルプログラムとともに説明します。
目次
strerrorの構文
#include <string.h>
char *strerror(int errnum);
strerrorの説明
strerrorは、errnumで指定されたエラー番号に対応するメッセージ文字列の先頭を指すのポインタを返します。
strerror関数は、errnumに入っている番号をメッセージ文字列に対応付ける。典型的にはerrnumの値は、errnoが使われるが、strerror関数はint型のすべての値に対してメッセージを割り当てなければならない。
JISX3010 プログラム言語C
errnum
エラーメッセージを取得したいエラー番号を指定します。
返却値
errnumで指定されたエラー番号に対応するエラーメッセージ文字列の先頭を指すポインタを返します。
strerrorの使い方サンプル
strerrorを使ってエラーメッセージを取得し出力する簡単なサンプルプログラムとその実行結果を紹介します。
サンプルプログラムとその実行結果
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main(void) {
/* グローバル変数のerrnoをクリア */
errno = 0;
fprintf(stdout, "1.errno[%d]\n", errno);
/* わざと存在しないファイルをOpenしてエラーを発生させる */
FILE *fp = fopen("dummy.txt", "r");
if (fp == NULL) {
/* errnoの値を確認 */
fprintf(stdout, "2.errno[%d]\n", errno);
fprintf(stdout, "3.strerror(%d):%s\n", errno, strerror(errno));
} else {
fclose(fp);
}
/*
#define EPERM 1
#define ENOENT 2
#define ENOFILE ENOENT
#define ESRCH 3
#define EINTR 4
#define EIO 5
:
*/
/* 試しに 1~5のエラー文字列を取得して出力してみる */
fprintf(stdout, "4.strerror(%d):%s\n", EPERM, strerror(EPERM));
fprintf(stdout, "5.strerror(%d):%s\n", ENOENT, strerror(ENOENT));
fprintf(stdout, "6.strerror(%d):%s\n", ESRCH, strerror(ESRCH));
fprintf(stdout, "7.strerror(%d):%s\n", EINTR, strerror(EINTR));
fprintf(stdout, "8.strerror(%d):%s\n", EIO, strerror(EIO));
}
strerrorの使い方まとめ
エラーが発生した場合のエラーメッセージを取得したい場合に、strerrorを使用することでエラーメッセージを取得することが出来る。