Программы:Каково возвращаемое значение функции telldir()?
#include<stdio.h>
#include<dirent.h>
void main()
{
int i=0;
DIR *dir=opendir("dir");
struct dirent *dent;
while((dent=readdir(dir))!=NULL){
printf("Filename: %s\t\t Location in Directory Stream: %ld\n",
dent->d_name,telldir(dir));
}
}
Выход:
$ ./a.out
Filename: b.txt Location in Directory Stream: 32
Filename: a.txt Location in Directory Stream: 64
Filename: d.c Location in Directory Stream: 96
Filename: . Location in Directory Stream: 128
Filename: test Location in Directory Stream: 160
Filename: .. Location in Directory Stream: 192
$
В приведенной выше программе возвращаемого значения функции telldir()
является кратные 32. В соответствии с ссылкой на страницы человека для telldir()
является «вернуть текущее местоположение в потоке каталогов ". Итак, я ожидаю, что каталог содержит 5 файлов, поэтому при первом вызове telldir()
возвращает 1 и в следующем вызове return 2. Но здесь результат умножен на 32. Как выглядит вывод? И почему функция telldir()
возвращает этот вид значения?
Возможно, вы захотите прочитать раздел ** Примечания ** на [этой странице руководства] (http://man7.org/linux/man-pages/man3/telldir.3.html). –
похоже на страницу руководства. Никакой дополнительной информации здесь не упоминается. – mrg
Из [ссылки на страницу руководства] (http://man7.org/linux/man-pages/man3/telldir.3.html): «Современные файловые системы используют структуры дерева или хеша, а не плоские таблицы, для представления каталогов. В таких файловых системах значение, возвращаемое telldir() (и используемое внутренне с помощью readdir (3)), является «cookie», которое используется реализацией для получения позиции в каталоге. *** Прикладные программы должны обрабатывать это строго как непрозрачное значение, не делая никаких предположений о его содержании *** ». Функция «telldir» возвращает значение, какое значение имеет значение, не интерпретирует его определенным образом. –