【C++】perror関数で簡単にエラーハンドリング

【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() など)のエラーチェック
  • ネットワークプログラミングでのエラーハンドリング

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です