Другой ответ на поставленный вопрос: «Потому что у fseek
есть второй аргумент, который не всегда равен нулю».
Если вы всегда передаете второй аргумент как ноль, тогда SEEK_CUR
установит указатель файла в его текущую позицию (что было бы почти бесполезным запретом), и SEEK_END
установит указатель файла на конец файла, а SEEK_CUR
установит его на начало файла, что может заставить вас задаться вопросом, почему он не называется SEEK_BEG
.
Но, конечно, fseek
имеет второй аргумент, и вы обычно передаете его как интересное ненулевое смещение. В большинстве случаев вторым аргументом является абсолютное смещение, к которому вы хотите стремиться, что и означает SEEK_SET
. Для удобства вы также можете установить позицию плюс-или-минус текущую позицию, для которой SEEK_CUR
, или плюс-или-минус конец файла, для которой SEEK_END
.
В случае, если whence
равно SEEK_SET
, а смещение равно 0, что означает, что вы пытаетесь установить указатель файла на начало файла, возможно, должно быть удобный ярлык для этого тоже. Но ярлык не называется SEEK_BEG
, это совершенно другая библиотечная функция: rewind(fp)
, которая действительно является ярлыком для fseek(fp, 0L, SEEK_SET)
.