2013-04-27 3 views
1

В настоящее время я программирую собственную реализацию функции fseek, и я хочу спросить, что происходит по нескольким причинам. Вот они:Что происходит с указателем поиска?

  1. Если искать происхождения устанавливается в SEEK_SET или SEEK_CUR и результат следующей позиции превышает размер файла?
  2. Если искать происхождение устанавливается в SEEK_END и результате следующей позиции меньше, чем 0

ли файл изменен для позиции, чтобы поместиться в нем, или есть какой-то код ошибки возвращается (что происходит потом с указателем положения)?

Пожалуйста, помогите.

+0

Вы можете получить хороший и подробный ответ на свой вопрос, изучив версии программного обеспечения C stdio (например, [MUSL libc] (http://musl-libc.org/), исходный код которого вполне читабельен). И [fseek (3) man page] (http://linux.about.com/library/cmd/blcmdl3_fseek.htm) также должна сообщить вам, что должно произойти. Кроме того, основная операционная система имеет значение (это какой-то Posix или Unix или Linux, или что-то еще?) –

ответ

2

Try человек FSEEK, чтобы получить более подробную информацию:

Функция FSEEK() устанавливает индикатор позиции файла для потока, на который указывает поток. Новая позиция, измеренная в байтах, получается путем добавления смещенных байтов в позицию, заданную по умолчанию. Если установлено значение SEEK_SET, SEEK_CUR или SEEK_END, смещение относительно начала файла, текущего указателя положения или конца файла, соответственно. Успешный вызов функции fseek() очищает индикатор конца файла для потока и отменяет любые эффекты функции ungetc (3) в том же потоке.

После успешного завершения fgetpos(), fseek(), fsetpos() возвращают 0, а ftell() возвращает текущее смещение. В противном случае возвращается -1, а errno устанавливается для указания ошибки.