Я пытаюсь изучить C, и в книге, которую я использую (Apress '' Learn C '), есть глава, которая ужасно запутывает функции произвольного доступа.Следующий код вводит меня в заблуждение:
int GetNumberOfDinos( void ) {
FILE *fp;
long fileLength;
if ( (fp = fopen( kDinoFileName, "r" )) == NULL )
DoError( "Couldn't open file...Goodbye!" );
if ( fseek( fp, 0L, SEEK_END ) != 0 )
DoError( "Couldn't seek to end of file...Goodbye!" );
if ( (fileLength = ftell( fp )) == -1L )
DoError( "ftell() failed...Goodbye!" );
fclose( fp );
return( (int)(fileLength / kDinoRecordSize) );
}
Я понимаю цель кода, но не понимаю, как эта цель достигается.Линия Fopen легко понять.Это случай, когда начинаются мои неприятности.Параметры для fseek - это файл, смещение, а затем один из 3 SEEK.Почему условие того, что оно не равно нулю, дано там?Если файл действительно существует (kDinoFileName), и они хотят указать на конец этого файла, почему местоположение будет нулевым?Файл существует и есть информация!И тогда я совершенно не понимаю, как функция ftell могла бы когда-либо заканчиваться -1L ??Этот код сложнее, чем должен быть?