errno
で使用すると、予期しない値が発生perror
しglibc
ます。存在しないファイルが期待どおりarg[1]
に印刷されるときに指定された場合Error: 2
(これはENOENT
)。ただし、以下の行のコメントが解除されると、何を渡してもperror
エラー22()がスローされます。EINVAL
なぜこれが設定されているのか誰かが説明できますか?
編集:これはある種のEclipseのバグのようです。IDEは、perrorに何らかのエラーをスローさせているようです。プログラムはコマンドラインで完全に機能し、Eclipseの引数リストで正しいファイルが指定されている場合は完全に機能します。Eclipse内で実行すると、正しく失敗します。
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char *argv[]) {
FILE *input_file;
input_file = fopen(argv[argc - 1], "r");
if (!input_file) {
// perror(argv[argc-1]);
fprintf(stderr, "Error: %d\n", errno);
return (EXIT_FAILURE);
}
else {
fclose(input_file);
}
return (EXIT_SUCCESS);
}