GNU/Linux >> Linux の 問題 >  >> Linux

errno をニーモニックとして出力しますか?

あなたの質問の 2 番目の部分は strerror によって回答されます (あなたが指摘するように)、またはそれ以上の strerror_r 、しかし glibc 少なくとも、単純に %m を使用できます フォーマット指定子として。

最初の部分はより興味深いものです。つまり、エラーの C 定数の名前を取得する方法です。標準の glibc を使用してそれを行う方法はないと思います .独自の静的配列またはハッシュ テーブルを作成して、これを比較的簡単に行うことができます。


残念ながら違います; E のイントロスペクション サポートはありません エラー マクロ。

これは Python で簡単に行うことができます:

import errno
print(errno.errorcode[errno.EPERM])

これは、Python の保守担当者がルックアップ テーブルの生成に苦労したためです:http://hg.python.org/cpython/file/tip/Modules/errnomodule.c


何が問題ですか?

perl -ne 'print "$1\n" if /^#\s*define\s+(E[A-Z0-9]+)/' < /usr/include/sys/errno.h | sort | uniq | perl -ne 'chomp; print "    { $_, \"$_\" }\n"'

この UNIX シェル コマンドは E* を出力します。 /usr/include/sys/errno.h から定義 { EINVAL, "EINVAL" }, の形式で (実際の定義が生きている場所) .その後、配列にラップすることができます:

struct errno_str_t {
    int code;
    const char *str;
} errnos[] = {
    { EINVAL, "EINVAL" },
    ...
};

必要に応じて、実行時に errno 値でソートします。 (ある程度) 移植可能にしたい場合は、これをビルド プロセスの一部にすることを検討してください。心配しないでください。これが本当の UNIX のやり方です :)


Linux
  1. 2つのファイルを2つの列に印刷しますか?

  2. フォルダ内のすべてのファイルを印刷しますか?

  3. 星のピラミッドを出力するシェルスクリプト

  1. Linux での awk コマンドの例

  2. awk:コマンドが見つかりません

  3. errno はスレッドセーフですか?

  1. アセンブリNASMで数値を出力するには?

  2. psを印刷グループにするにはどうすればよいですか?

  3. unzip コマンドを元に戻すには?