как искать в конце файла, чтобы определить размер файла? - PullRequest
3 голосов
/ 13 октября 2011

Я пытаюсь получить размер файла в программировании на c, используя поиск.Я не могу использовать fseek, stat.size или ftell, есть специальный Unix операционной системы, в котором мне нужно работать.Как я могу узнать размер файла, просто используя поиск?Является ли это возможным?Спасибо!

FILE *fd = open(argv[1], "r");

  if(fd == NULL)
  {
          printf("Not able to open the file : %s\n", argv[1]);
          return;
  }

  // Set the pointer to the end
   seek(fd, 0, SEEK_END);

Ответы [ 3 ]

7 голосов
/ 13 октября 2011

seek? Вы имеете в виду lseek вероятно. Загляните на справочную страницу . Что возвращает lseek?

3 голосов
/ 13 октября 2011

Если вам просто интересно, будет ли конструкция, использующая offset = 0 с wherece = SEEK_END, позиционировать смещение файла до конца файла, то «да», вы правы, по крайней мере, для «стандартных f / lseek». Я сталкивался.

lseek должен непосредственно возвращать смещение файла. Для fseek следующий ftell даст вам смещение файла.

1 голос
/ 13 октября 2011

Обычно open() возвращает целое число, а не FILE *.Вы должны проверить возвращаемое значение> = 0. fopen() из <stdio.h> возвращает FILE *.Кроме того, для записи, fopen() и fseek() являются частью стандартной библиотеки C.UNIX open () является частью POSIX.Таким образом, в общем случае fopen() / fseek() более переносим.

Если вы действительно находитесь в пользовательской среде "Unix-like", туда, где это больше не так (т.е. вместо этого у вас есть собственный APIиз unistd.h) тогда вы не найдете здесь хорошего ответа без предоставления дополнительной информации.Можете ли вы сказать нам, какую ОС вы действительно используете?

Или, как предложил Лютер, проверьте возвращаемое значение lseek(), если вы используете обычный <unistd.h>.

...