【C++】perror関数で簡単にエラーハンドリング
perror関数とは?
perror関数は、CおよびC++で使用される標準ライブラリ関数で、システムエラーのメッセージを表示するために使われます。主に、エラー発生時に原因を明示する目的で利用されます。
この関数は、stdio.h
(C言語)またはcstdio
(C++)で定義されています。
void perror(const char *s);
この関数は、引数s
とともに、errno
の値に対応するエラーメッセージを標準エラー出力に表示します。
perror関数の使い方
perror関数は、主にシステムコールやライブラリ関数がエラーを返した際に、そのエラーの詳細を表示するために使用されます。
例えば、ファイルを開くfopen()
関数が失敗した場合、その理由をperrorを使って出力できます。
#include <cstdio>
#include <cstdlib>
int main() {
FILE *file = fopen("nonexistent.txt", "r");
if (!file) {
perror("ファイルを開けませんでした");
return EXIT_FAILURE;
}
fclose(file);
return EXIT_SUCCESS;
}
このコードを実行すると、例えば以下のような出力が得られます:
ファイルを開けませんでした: No such file or directory
perror関数の具体例
1. ファイルオープンエラーの表示
#include <cstdio>
#include <cerrno>
#include <cstdlib>
int main() {
FILE *file = fopen("test.txt", "r");
if (!file) {
perror("エラー発生");
return EXIT_FAILURE;
}
fclose(file);
return EXIT_SUCCESS;
}
2. メモリ確保エラーの表示
#include <cstdio>
#include <cstdlib>
int main() {
size_t largeSize = 1024UL * 1024UL * 1024UL * 100; // 100GB
void *ptr = malloc(largeSize);
if (!ptr) {
perror("メモリ確保失敗");
return EXIT_FAILURE;
}
free(ptr);
return EXIT_SUCCESS;
}
strerror関数との違い
perror関数と同様にエラーを表示する関数にstrerror
があります。strerror
は、エラーコードerrno
を文字列に変換する関数です。
例:
#include <cstdio>
#include <cerrno>
#include <cstring>
int main() {
FILE *file = fopen("nonexistent.txt", "r");
if (!file) {
printf("エラー: %s\n", strerror(errno));
}
return 0;
}
perrorはエラーメッセージを直接標準エラー出力に出力するのに対し、strerrorはメッセージを取得して後で使用できる点が異なります。
perror関数の活用場面
- ファイル操作(読み込み、書き込み)でのエラー表示
- メモリ確保エラーのデバッグ
- システムコール(
open()
、read()
など)のエラーチェック - ネットワークプログラミングでのエラーハンドリング