Ошибка чтения файла: успех - PullRequest
0 голосов
/ 31 января 2011

У меня есть следующий базовый код:

   fd = open("test.file", O_RDONLY);
   if (read(fd, &tempch, 1) < 1) {
         perror("File Read Error");
         exit(1);
   }
   printf("We could read from the file\n");

test.file присутствует в файловой системе и ему предоставлены права 777.программа выдает ошибку "ошибка чтения файла: успех" ... кто-нибудь может сказать возможную причину?спасибо

Ответы [ 3 ]

6 голосов
/ 31 января 2011

Совершенно нормально, что read() возвращает нулевой счет, это просто означает, что он столкнулся с концом файла. Если он возвращает значение меньше нуля, это ошибка.

Если возвращается -1, следует установить errno, который сообщит вам, что пошло не так.

Ваш файл содержит что-нибудь? Поскольку вы упомянули UNIX-подобные разрешения, вам может пригодиться спецификация POSIX для read () .

2 голосов
/ 31 января 2011

Возможно, вы захотите проверить возвращаемое значение open, а также количество байтов в test.file!Если размер файла равен 0 байтам, возвращаемое значение меньше 1, как и ожидалось.

со страницы руководства по прочтению

В случае успеха возвращается количество прочитанных байтов (ноль).указывает конец файла), и позиция файла увеличивается на это число.Не является ошибкой, если это число меньше числа запрошенных байтов;это может произойти, например, потому что на самом деле сейчас доступно меньше байтов (может быть, потому что мы были близки к концу файла, или потому что мы читаем из канала, или из терминала), или потому что read () была прерванасигнал.

1 голос
/ 31 января 2011

Я не уверен, но это

if (read(fd, &tempch, 1) < 1)

почти наверняка должно быть

if (read(fd, &tempch, 1) < 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...