Поле s_realvp
(REALVP
) указывает на vnode файла реальной файловой системы (в данном случае ufs). Поэтому далее поиск аналогичен проделанному при исследовании таблицы монтирования.
> vnode f5f992e8
VCNT VFSMNTED VFSP STREAMP VTYPE RDEV VDATA VFILOCKS VFLAG
2 0 f0286570 0 с 24,26 f5f992e0 0 -
> ui f5f992e0
UFS INODE TABLE SIZE = 1671
SLOT MAJ/MIN INUMB RCNT LINE UID GID SIZE MODE FLAGS
- 32,24 317329 2 1 286 7 0 c---620 rf
> ! ncheck. -i 317329
/dev/dsk/c0t3d0s0:
317329 /devices/pseudo/pts@0:26
В результате мы определили имя специального файла устройства (в данном случае — это псевдотерминал), на которое производится ввод и вывод командного интерпретатора.
Блокирование доступа к файлу
Традиционно архитектура файловой подсистемы UNIX разрешает нескольким процессам одновременный доступ к файлу для чтения и записи. Хотя операции записи и чтения, осуществляемые с помощью системных вызовов
UNIX позволяет обеспечить блокирование заданного диапазона байтов файла или записи файла. Для этого служат базовый системный вызов управления файлом
По умолчанию блокирование является
Мы уже встречались с использованием системного вызова flock
, служащая для описания блокирования. Поля этой структуры описаны в табл. 4.8.
Таблица 4.8. Поля структуры flock
Поле | Описание |
---|---|
short l_type | Тип блокирования: F_RDLCK обозначает блокирование для чтения (read lock), F_WRLCK — блокирование для записи (write lock), F_UNLCK обозначает снятие блокирования. |
short l_whence | Точка отсчета смещения записи в файле. Может принимать значения, аналогичные рассмотренным при разговоре о функции lseek(2) в главе 2: SEEK_SET , SEEK_CUR , SEEK_END . |
off_t l_start | Смещение блокируемой записи относительно точки отсчета, указанной полем l_whence . |
off_t l_len | Длина блокируемой записи. Нулевое значение l_len указывает, что запись всегда распространяется до конца файла, независимо от возможного изменения его размера. |
pid_t l_pid | Идентификатор процесса, установившего блокирование, возвращаемый при вызове команды GETLK . |
Как следует из описания поля l_type
структуры flock
, существуют два типа блокирования записи: для чтения (F_RDLCK
) и для записи (F_WRLCK
). Правила блокирования таковы, что может быть установлено несколько блокирований для чтения на конкретный байт файла, при этом в установке блокирования для записи на этот байт будет отказано. Напротив, блокирование для записи на конкретный байт должно быть единственным, при этом в установке блокирования для чтения будет отказано.