У меня неожиданное значение 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);
}