Книга: Программирование для Linux. Профессиональный подход
7.5.4. Блокировки
7.5.4. Блокировки
В файле /proc/locks
перечислены все блокировки файлов, установленные в настоящий момент в системе. Каждая строка соответствует одной блокировке.
Для блокировок, созданных функцией fcntl()
(описана в разделе 8.3. "Функция fcntl(): блокировки и другие операции над файлами"), первыми двумя элементами строки будут слова POSIX
и ADVISORY
. Третьим элементом будет WRITE
или READ
, в зависимости от типа блокировки. Следующее число — это идентификатор процесса, установившего блокировку. За ним идут три числа, разделенные двоеточиями. Это старший и младший номера устройства, на котором расположен файл, а также номер индексного дескриптора, оказывающий на местоположение файла в файловой системе. Оставшиеся числа используются внутри ядра и не представляют интереса.
Чтобы понять, как работает файл /proc/locks
, запустите программу, приведенную в листинге 8.2. и поставьте блокировку записи на файл /tmp/test-file
.
% touch /trap/test-file
% ./lock-file /tmp/test-file
file /tmp/test-file
opening /tmp/test-file
locking
locked; hit enter to unlock...
В другом окне просмотрите содержимое файла /proc/ locks
:
% cat /proc/locks
ls POSIX ADVISORY WRITE 5467 08:05:181288 0 2147483647 d1b5f740
00000000 dfea7d40 00000000 00000000
В файле могут присутствовать дополнительные строки, если какие-то программы устанавливали свои блокировки. В данном случае идентификатор процесса программы lock-file
— 5467. Убедимся в этом с помощью команды ps:
% ps 5467
PID TTY STAT TIME COMMAND
5467 pts/28 S 0:00 ./lock-file /tmp/test-file
Заблокированный файл /tmp/test-file
находится на устройстве со старшим и младшим номерами 8 и 5 соответственно. Это номера устройства /dev/sda5
:
% df /trap
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/sda5 8459764 5094292 2935736 63% /
% ls -l /dev/sda5
brw-rw---- 1 root disk 8, 5 May 5 1998 /dev/sda5
На этом устройстве с файлом /tmp/test-file
связав индексный дескриптор 181288:
% ls --inode /trap/test-file
181288 /tmp/test-file
- ГЛАВА 8 Блокировки чтения-записи
- Секвентные блокировки
- 14.2.1. Концепции блокировки файлов
- 14.2.2.1. Описание блокировки
- Блокировки чтения
- Блокировки между обработчиками нижних половин
- Блокировки
- Взаимоблокировки
- Конфликт при захвате блокировки и масштабируемость
- Блокировки в вашем коде
- Спин-блокировки
- Спин-блокировки и обработчики нижних половин