Индикатор типа файла, sys / stat.h st_mode обычное значение кода файла

StackOverflow https://stackoverflow.com/questions/1041616

  •  22-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь определить типы файлов для записей каталога (Windows Unix и т. д.).

В файле sys / stat.h высший разряд слова st_mode имеет закодированные значения:

#define S_IFDIR  0x4000  /* directory */
#define S_IFIFO  0x1000  /* FIFO special */
#define S_IFCHR  0x2000  /* character special */
#define S_IFBLK  0x3000  /* block special */
#define S_IFREG  0x8000  /* or just 0x0000, regular */

Из комментария кажется, что nybble может быть 0 или 8 для представления «обычный файл».

Таким образом, возникает вопрос: при каких обстоятельствах это 0, а не 8? Если бы я определил эти коды, я бы зарезервировал 0, чтобы указать неизвестный / неопределенный / недействительный / не-файл или что-то в этом роде.

Действительно, макрос S_ISREG:

#define S_ISREG(m)  ((m) & S_IFREG)

Мне кажется, это указывает на то, что обычный файл должен всегда следует иметь код 8 (а 0 будет аббревиатурой?).

Допустимо ли интерпретировать 0 как неизвестный или недействительный файл и игнорировать комментарий 'или просто 0x0000' и всегда ожидать, что 8 будет использоваться для всех обычных файлов?

Это было полезно?

Решение

Большинство источников указывают, что проверки S_ISREG достаточно; Я не уверен, когда вы увидите 0x0000 как "обычный" файл.

Я полагаю, что некоторые старые реализации использовали 0x0000 (действительно старый поиск в заголовке DJGPP показывает это), но это единственная реальная ссылка, которую я могу найти. Все остальное указывает на 0x8000.

По сути, используйте макрос S_ISREG и надейтесь, что заголовок того, против чего вы компилируете, делает правильно.

Другие советы

Я бы доверял определениям S_IFREG и S_ISREG. Я никогда не работал с файловой системой, которая сломала эти макросы.

Я предполагаю, что определение 0x0000 для обычного файла предназначено для обработки устаревших файловых систем, которые могли использовать другую кодировку информации о типе файла. Какую ОС и файловую систему вы используете?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top