nftw передает tflag с неопределенным значением
Проходя по каталогу, используя nftw, вот так:
nftw((argc < 2) ? "." : argv[1], rm, 20, FTW_DEPTH|FTW_PHYS)
nftw передает значение 5 параметру tflag функции rm, когда встречается с каталогом. Заголовок ftw.h указывает только перечисление с 4 значениями (0-3) для параметра tflag, из которых FTW_D или 1 является подходящим значением для каталога. Значение fpath представляется правильным во всех случаях.
Итак, мой вопрос заключается в следующем. Почему он передает 5, а не 1 для флага, и что 5 означает для флага?
РЕДАКТИРОВАТЬ:
Фактически это было значение FTW_DP (каталог, все подкаталоги были посещены), которое было определено ниже в зависимой от среды части, которую я не заметил.
1 ответ
Спецификация POSIX nftw()
говорит, что флаг аргумент вашего rm
функция должна быть одной из:
FTW_D
Объект является каталогом.FTW_DNR
Объект представляет собой каталог, который не может быть прочитан. Функция fn не должна вызываться ни для одного из ее потомков.FTW_DP
Объект является каталогом, и подкаталоги были посещены. (Это условие должно возникать только в том случае, если флаг FTW_DEPTH включен в флаги.)FTW_F
Объект не является каталогом.FTW_NS
Функция stat() не выполнена на объекте из-за отсутствия соответствующих разрешений. Буфер статистики, передаваемый в fn, не определен. Сбой stat() по любой другой причине считается ошибкой, и nftw() возвращает -1.FTW_SL
Объект является символической ссылкой. (Это условие должно происходить только в том случае, если в флаги включен флаг FTW_PHYS.)FTW_SLN
Объект является символической ссылкой, которая не называет существующий файл. (Это условие должно выполняться только в том случае, если флаг FTW_PHYS не включен в флаги.)
Поскольку вы не идентифицируете свою систему, а стандарт не определяет, какое число должно быть связано с аргументом флага вызываемой функции, никто не может определить, что 5
значит в твоей системе. Тем не менее, есть достаточно вариантов, которые 5
не кажется неправдоподобным как ценность.
В Mac OS X (10.9.5) значение 5
было бы FTW_SL
, В другой системе, основанной на OSF, jedwards отмечает в комментарии, что значение 5
для FTW_DP
Таким образом, полностью оправдывая мое наблюдение, что флаг, представленный 5
зависит от системы.