Хорошо, когда такая операция ввода-вывода завершается с ошибкой, равно как и -1, вы получаете глобальный результат int errno;
Там, где у вас есть printf, замените его на
perror(argv[0]); /* or something else useful. See below */
и добавьте объявление
int errno;
между вашими #include
s и int main
, и вы получите полезное сообщение об ошибке.
(PS:Проверьте две вещи: убедитесь, что файл находится там, где вы ожидаете, и используйте ls -l
, чтобы убедиться, что он читабелен.)
Обновление
Черт, вот что яполучить за то, что не проверял справочную страницу.Аргумент perror
действительно является строкой, используемой для предисловия к сообщению об ошибке.