почему на странице руководства C readdir сказано, что не следует вызывать свободный вызов в статической выделенной структуре результата

$ uname -a

Linux crowsnest 2.6.32-28-generic #55-Ubuntu SMP Mon Jan 10 23:42:43 UTC 2011 x86_64 GNU/Linux

$ man readdir:

ОПИСАНИЕ

readdir () функция возвращает указатель на прямую структуру, представляющую следующую запись каталога в потоке каталога, на который указывает dirp ...

.. [snip] ...

Функция readdir_r () - это реентерабельная версия readdir () ...

... [snip] ...

RETURN VALUE

В случае успеха readdir () возвращает указатель на структуру dirent. (Эта структура может быть размещена статически; не пытайтесь освободить (3) ее.) Если достигнут конец потока каталога, возвращается NULL, а errno не изменяется. Если происходит ошибка, возвращается NULL и значение errno устанавливается соответствующим образом.

Функция readdir_r () возвращает 0 в случае успеха. В случае ошибки возвращается положительный номер ошибки. Если достигнут конец потока каталога, readdir_r () возвращает 0 и возвращает NULL в * result.

Я не понимаю, что это означает, мое применение этой функции состоит в сборе динамически выделяемого массива указателей на структуры с данными о записях каталогов, и мне интересно, могу ли я динамически выделять прямые структуры и устанавливать на них указатели. но эта строка говорит о том, что результат никогда не должен вызываться free, поэтому мне интересно, следует ли мне выделить отдельную структуру dirent, которая будет частью списка, и запомнить ее поверх возвращенного результата.

Я также сбивает с толку терминология «может» на приведенной выше странице руководства. Означает ли это, что иногда они размещаются статически, а иногда нет.

Я знаком (смутно) с тем, что означают статические переменные в C, но не уверен во всех правилах и возможных проблемах вокруг них. поскольку я хочу передать директивные структуры, находящиеся в каком-либо каталоге, я бы предпочел, чтобы они выделялись динамически. для этого нужен readdir_r? или будет установлен двойной указатель, указывающий на другую статически выделенную структуру dirent?

и я не совсем уверен, что означает повторный вход в данном контексте для readdir_r. я понимаю ренетрант только из сопрограмм схемы, которые я не уверен, как это применимо к чтению каталогов unix.

5
задан Fire Crow 23 August 2011 в 09:32
поделиться