1. ホーム
  2. c

[解決済み] c の unix_error 関数に関する問題

2022-02-08 08:16:50

質問事項

私は特定のファイルをインクルードしていないと考えていますが、インターネット上でインクルードする必要があるファイルを見つけることができないようです。何かヒントがありますか?

EDIT: 私はこんな風に書いています。

while((pid = waitpid(-1, NULL, 0)) > 0){
        printf("SERVER: Handler reaped child %d\n", (int) pid);
        child_count--;
    }
    if(errno != ECHILD){
        unix_error("waitpid error");
    }
    sleep(2);
    return;

コンパイル時にunix_errorのエラーが発生します。

解決方法を教えてください。

標準的な関数がない unix_error() .

多くの目的で、このコードを使用することができます。

unixerr.h

#ifndef UNIXERR_H_INCLUDED
#define UNIXERR_H_INCLUDED

extern void unix_error(const char *msg);

#endif /* UNIXERR_H_INCLUDED */

unixerr.c

#include "unixerr.h"
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void unix_error(const char *msg)
{
    int errnum = errno;
    fprintf(stderr, "%s (%d: %s)\n", msg, errnum, strerror(errnum));
    exit(EXIT_FAILURE);
}

改善点はたくさんあります。主なものは、出力の最初にプログラム名を追加することでしょう。 もうひとつは、この関数が、以下のような可変長の引数リストをサポートするようにすることです。 printf() があります。エラー番号を表示するのが嫌だという人もいますが、私は好きです。