Книга: Программирование для Linux. Профессиональный подход
5.3.3. Совместный доступ к файлу
5.3.3. Совместный доступ к файлу
Процессы могут взаимодействовать друг с другом через области отображаемой памяти, связанные с одним и тем же файлом. Если в функции mmap()
указать флаг MAP_SHARED
, все данные, заносимые в отображаемую память, будут немедленно записываться в файл, т.е. становиться видимыми другим процессам. При отсутствии этого флага ОС Linux может осуществлять предварительную буферизацию записываемых данных.
С другой стороны, с помощью функции msync()
можно заставить операционную систему перенести содержимое буфера в дисковый файл. Первые два параметра этой функции такие же, как и в функции munmap()
. Третий параметр может содержать следующие флаги.
? MS_ASYNC
. Операция обновления ставится в очередь планировщика и будет выполнена, но не обязательно до того, как функция завершится.
? MS_SYNC
. Операция обновления выполняется немедленно. До ее завершения функция блокируется. Флаги MS_ASYNC
и MS_SYNC
нельзя указывать одновременно.
? MS_INVALIDATE
. Все остальные отображаемые области помечаются как недействительные и подлежащие обновлению.
Следующая функция обновляет файл, область отображения которого начинается с адреса mem_addr
и имеет длину mem_length
:
msync(mem_addr, mem_length, MS_SYNC | MS_INVALIDATE);
Как и в случае совместного использования сегментов памяти, при работе с отображаемыми областями необходимо придерживаться определенного порядка во избежание конкуренции. Например, можно создать семафор, который позволит только одному процессу обращаться к отображаемой памяти в конкретный момент времени. Можно также воспользоваться функцией fcntl()
и поставить на файл блокировку чтения или записи (об этом рассказывается в разделе 8.3, "Функция fcntl(): блокировки и другие операции над файлами").
- Что делать, если при установке принтера появляется сообщение Невозможно завершение операции. Подсистема печати недоступн...
- 9.4. Права доступа к squid
- Глава 29 Доступ к канальному уровню
- 10.5. Транзакции и пути доступа меню
- Настройка доступа пользователей к рабочей книге
- 3.5 Проблемы доступа при использовании нескольких протоколов
- Доступ к существующим рабочим областям для документов
- Есть ли быстрый способ доступа к папкам?
- Как открыть доступ к своей папке другим пользователям?
- Я открыл доступ к папке
- Как сделать так, чтобы папка на одном компьютере в сети была доступна для другого компьютера, даже если первый выключен?
- Говорят, хакеры могут получить доступ к моему почтовому ящику или ICQ. Как им помешать?