Какие заголовки C для обхода каталога безопасны для процесса в Linux? - PullRequest
1 голос
/ 06 мая 2010

В настоящее время я использую dirent.h и ftw.h для обхода каталога на моем CGI-сайте, на 100% запрограммированном на C. Я не уверен, безопасны ли они для процесса; будут ли разные пользователи мешать друг другу, пока я на сайте?

Какие функции вы бы порекомендовали для этой цели?

Ответы [ 2 ]

1 голос
/ 07 мая 2010

Безопасно для нескольких процессов, например, использовать ftw() для одновременного обхода одного и того же дерева каталогов.

Однако не обязательно для одного процесса обходить дерево каталогов, в то время как другой процесс обновляет ту же структуру дерева каталогов (т.е. добавление, удаление или переименование каталогов). Если у вас такая ситуация, вам нужно будет заставить ваши процессы CGI использовать консультативную блокировку flock() (вы можете просто иметь один пустой файл блокировки в корне дерева общих каталогов; процессы, которые хотят пройтись по дереву, должны принять общая блокировка для этого файла блокировки, и процессы, которые хотят изменить дерево, должны получить эксклюзивную блокировку для файла блокировки).

0 голосов
/ 06 мая 2010

Вы, вероятно, имеете в виду «потокобезопасный», а не процессно-безопасный.Все вызовы libc безопасны для процессов в Linux, поскольку процессы (обычно) живут в отдельных пространствах памяти.С другой стороны, readdir не является поточно-ориентированным, поскольку сохраняет внутреннее статическое хранилище для контекста.В этом случае используйте readdir_r (_r означает реентерабельность).Другие функции в dirent.h являются реентерабельными по умолчанию.

...