2012-03-09 2 views
3

То, что мне нужно, - это значение такого типа и какой интерфейс может его использовать.В Posix как используется тип dev_t?

В описании Posix объясняется, что для идентификаторов устройств используется dev_t. Однако какой идентификатор устройства означает для любого объекта, описанного в пути, который может быть файлом, директивой, фиолетовым или физическим устройством?

Например, при вызове stat() вам предоставляется структура, включающая член такого типа; и вы можете установить любые виды объектов в вашей файловой системе. Идентификатор устройства должен иметь разные значения для разных типов файлов.

ответ

8

Единственное использование dev_t в подавляющем большинстве программ (те, которые являются портативными и не подключены к одной ОС), чтобы определить, что имена двух файлов или файловых дескрипторов относятся к одной и той же основной файл. Это верно тогда и только тогда, когда записи st_ino и st_dev для двух файлов «stat» соответствуют друг другу.

В основном, st_dev указывает, какое «устройство» (например, смонтированное разделение, сетевой ресурс и т. Д.) Находится, а st_ino - уникальный идентификатор файла в контексте одного устройства.

4

На самом деле, есть два dev_t -typed поля в struct stat:

  • st_dev является «[d] evice идентификатор устройства, содержащего файл», так что, если два файла имеют один и тот же st_dev, они на той же файловой системы.
  • st_rdev - это идентификатор устройства, обозначенный специальным файлом символов или блоков, то есть файлы, обычно встречающиеся в /dev. Он не имеет значения для других типов файлов.
+0

Но вы не объяснили, что такое идентификатор устройства. Для нормального файла нет связанного с ним устройства, то что означает здесь идентификатор? –

+0

@MengfeiMurphy: каждый файл существует на каком-либо устройстве, будь то раздел диска или сетевой ресурс. Это то, что обозначает 'st_dev'. –

3

Внутри ядра тип dev_t, который определен в, используется для хранения номеров устройств (майор/минор). dev_t - 32-разрядное количество с 12 бит, выделенное для основного номера, и 20 для младшего номера.

+0

Да, мой/dev/sda1 'st_rdev' дает 2049, что верно, потому что он находится в главном 8 мин. 1 – Mustafa

 Смежные вопросы

  • Нет связанных вопросов^_^