Как удалить заблокированный файл или папку. Грамотная работа с файлами: исключительная блокировка файлов

Разделы на этой странице:

В системах, допускающих одновременное выполнение нескольких процессов, особую актуальность приобретает проблема координации и синхронизации доступа к разделяемым (совместно используемым) объектам, например файлам.

В Windows имеется возможность блокировать файлы (целиком или частично) таким образом, что никакой другой процесс (выполняющаяся программа) не сможет получить доступ к заблокированному участку файла. Блокирование файла может оставлять другим приложениям возможность доступа только для чтения (разделяемый доступ) или же закрывать им доступ к файлу как для записи, так и для чтения (монопольный доступ). Что немаловажно, владельцем блокировки является блокирующий процесс. Любая попытка получения доступа к части файла (с помощью функций ReadFile или WriteFile) в нарушение существующей блокировки закончится неудачей, поскольку блокировки носят обязательный характер на уровне процесса. Любая попытка получения несовместимой блокировки также завершится неудачей, даже если процесс уже владеет данной блокировкой. Блокирование файлов является ограниченной разновидностью синхронизации параллельно выполняющихся процессов и потоков; обсуждение синхронизации с использованием гораздо более общей терминологии начнется в главе 8.

Для блокирования файлов предусмотрены две функции. Более общей из них является функция LockFileEx, менее общей - LockFile, которую можно использовать и в Windows 9x.

Функция LockFileEx относится к классу функций расширенного (extended) ввода/вывода, поэтому для указания 64-битовой позиции в файле и границ области файла, подлежащей блокированию, необходимо использовать структуру OVERLAPPED, которая ранее уже применялась при указании позиции в файле для функций ReadFile и WriteFile.

BOOL LockFileEx(HANDLE hFile, DWORD dwFlags, DWORD dwReserved, DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh, LPOVERLAPPED lpOverlapped)

Функция LockFileEx блокирует участок открытого файла либо для разделяемого доступа (разрешающего доступ одновременно нескольким приложениям в режиме чтения), либо для монопольного доступа (разрешающего доступ только одному приложению в режиме чтения/записи).

Параметры

hFile - дескриптор открытого файла. Дескриптор должен быть создан либо с правами доступа GENERIC_READ, либо с правами доступа GENERIC_READ и GENERIC_WRITE.

dwFlags - определяет вид блокировки файла, а также режим ожидания доступности затребованной блокировки. Этот параметр определяется комбинацией следующих значений:

LOCKFILE_EXCLUSIVE_LOCK - запрос монопольной блокировки в режиме чтения/записи. Если это значение не задано, запрашивается разделяемая блокировка (только чтение).

LOCKFILE_FAIL_IMMEDIATELY - задает режим немедленного возврата функции с возвращаемым значением равным FALSE, если приобрести блокировку не удается. Если это значение не задано, функция переходит в режим ожидания.

dwReserved - значение этого параметра должно устанавливаться равным 0. Следующие два параметра определяют соответственно младшие и старшие 32-битовые значения размера блокируемого участка файла (в байтах).

lpOverlapped - указатель на структуру данных OVERLAPPED, содержащую информацию о начале блокируемого участка. В этой структуре необходимо устанавливать значения трех элементов (остальные элементы игнорируются), первые два из которых определяют смещение начала блокируемого участка от начала файла.

DWORD Offset (используется именно такое имя параметра, а не OffsetLow).

DWORD OffsetHigh.

HANDLE hEvent должен задаваться равным 0.

Чтобы разблокировать файл, следует вызвать функцию UnlockFileEx, все параметры которой, за исключением dwFlags, совпадают с параметрами предыдущей функции:

BOOL UnlockFileEx(HANDLE hFile, DWORD dwReserved, DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh, LPOVERLAPPED lpOverlapped)

Используя блокирование файлов, вы должны принимать во внимание следующие обстоятельства:

Границы области разблокирования должны в точности совпадать с границами ранее заблокированной области. Не допускается, например, объединение двух ранее заблокированных областей или разблокирование части заблокированной области. Любая попытка разблокирования области, не совпадающей в точности с одной из существующих заблокированных областей, будет неудачной. В этом случае функция вернет значение FALSE, а в выведенном системой сообщении об ошибке будет указано, что данная область блокирования не существует.

Вновь создаваемая и существующие области блокирования в файле не могут перекрываться, если это приводит к возникновению конфликтной ситуации.

Возможно блокирование участка, границы которого выходят за пределы файла. Такая операция может оказаться полезной в случае расширения файла процессом или потоком.

Блокировки не наследуются вновь создаваемыми процессами.

Логику процедуры блокирования, когда вся область или только некоторая ее часть уже содержат заблокированные участки, иллюстрирует табл. 3.1.

Таблица 3.1. Логика предоставления блокировки

Логику предоставления возможности выполнения операций чтения/записи во всей или части области файла, содержащей участки с одной или несколькими блокировками, владельцами которых являются другие процессы, иллюстрирует табл. 3.2.

Таблица 3.2. Блокировки и выполнение операций ввода/вывода

Операция ввода/вывода
Существующая блокировка Чтение Запись
Отсутствует Успешно выполняется Успешно выполняется
Разделяемая блокировка (одна или несколько) Выполняется. Вызывающий процесс не обязан быть владельцем блокировки данной области файла. Не выполняется
Монопольная блокировка Выполняется, если вызывающий процесс является владельцем блокировки, в противном случае - неудачное завершение.

Обычно операции чтения и записи выполняются путем вызова функций Read-File и WriteFile или их расширенных версий ReadFileEx и WriteFileEx. Для диагностики ошибок, возникающих в процессе выполнения операций ввода/вывода, следует вызывать функцию GetLastError.

Одна из разновидностей операций ввода/вывода с участием файлов предполагает использование отображения файлов, которое обсуждается в главе 5. Обнаружение конфликтов блокировки на этапе обращения к памяти не производится; такая проверка осуществляется во время вызова функции MapViewOfFile. Указанная функция делает часть файла доступной для процесса, вследствие чего проверка наличия блокировок на этом этапе является необходимой.

Как удалить заблокированный в системе Windows файл или папку? Начнем с того, что не каждый файл или папку нужно удалять: так, например, важные файлы самой Windows защищены от пользовательского вмешательства, и для их удаления потребуется запросить разрешение от TrustedInstaller – скрытой системной учетной записи, которая на голову выше любой учетной записи администратора. Если речь идет о редких случаях осознанного и контролируемого процесса удаления файлов или папок, которому препятствует системное уведомление «Запросите разрешение от TrustedInstaller», полный доступ с разрешением TrustedInstaller можно получить в свойствах удаляемой папки или файла.

Удаление заблокированных несистемных файлов и папок (пользовательских или рабочих данных стороннего ПО) – процедура менее опасная, и для этих целей существуют, соответственно, способы попроще. Один из них – закрытие процесса или программы, использующих удаляемый файл.

Если удаляемые файл или папка используются активным процессом, который нельзя завершить в работающей Windows с помощью диспетчера задач, решить вопрос с удалением можно:

Перезагрузив систему;

В безопасном режиме работы Windows;

Загрузившись с Live-дисков или даже обычного установочного носителя Windows;

В другой Windows или иной операционной системе, установленной на другом разделе или диске компьютера.

Но гораздо проще удалить заблокированный файл или папку при помощи специальных утилит – минималистичных программок для разблокировки данных. В отдельных случаях они не решат вопрос без перезагрузки Windows, но точно избавят от необходимости загружаться с других носителей или другой операционной системы. Не нужно будет даже самостоятельно выискивать программу или процесс, которые блокируют удаление, переименование или перемещение данных. Утилиты-разблокировщики сами закроют нужную программу или процесс. Естественно, при условии, что работа системы без блокирующего процесса возможна. Если нет, в таком случае обычно утилиты обещают, что удалят проблемный файл при следующей загрузке системы. Утилиты-разблокировщики, как правило, встраиваются в контекстное меню проводника системы, предлагая более удобный способ разблокировки файлов и папок, нежели форма их добавления в интерфейс самих утилит. Ниже рассмотрим тройку бесплатных утилит для удаления заблокированных в системе Windows файлов.

1. Unlocker

Unlocker – пожалуй, самая известная утилита из разряда разблокировщиков файлов. При ее запуске получим доступ к форме обзора в стиле проводника Windows для добавления файлов, которые нужно разблокировать, переименовать, переместить или удалить.

Работая с утилитой из контекстного меню, на заблокированном файле, соответственно, выбираем пункт «Unlocker».

Инсталлятор Unlocker настроен на установку в систему вместе с «довесками», необходимо внимательно отслеживать шаги мастера установки, чтобы убрать галочки попутного внедрения ненужного софта.

2. Lock Hunter

Утилита Lock Hunter от Unlocker отличается возможностью работы не только с файлами, но и с заблокированными папками. Lock Hunter предусматривает кнопку обзора внутри своего интерфейса для добавления заблокированных папок или файлов, утилита также встраивается в контекстное меню проводника Windows в виде вопроса «Что блокирует этот файл (папку)».

По итогу отображения заблокированных папки или файла в окне утилиты их можно разблокировать, удалить, переименовать, перенести, завершить используемый их процесс (если это возможно).

3. UnlockMe

Утилита UnlockMe, как и предыдущие участники обзора, работает с заблокированными папками и файлами как внутри собственного интерфейса, предусматривая кнопки добавления данных,

так и посредством опции в контекстном меню проводника Windows.

UnlockMe не предлагает функций удаления, переименования или перемещения файлов, утилита только проводит разблокировку файлов, завершая работу препятствующих программ или процессов (если это возможно). После разблокировки утилитой UnlockMe все нужные операции с папками и файлами осуществляются в проводнике или файловом менеджере.

Работая с ОС Windows, часто приходится сталкиваться с тяжело удаляемыми файлами. Если файл используется каким-то приложением, либо самой системой, обычным способом удалить его не получится. На многократные и нервозные нажатия клавиши «Delete» в лучшем случае система монотонно будет отвечать одно и то же: «Файл используется, и удалить его невозможно», при худших раскладах - компьютер зависнет.

Безусловно, это раздражает хотя бы по той простой причине, что в доме хозяином должен быть пользователь, а не искусственный интеллект с очередными заморочками от Microsoft. Как же решить эту проблему и удалить проблемный файл?

Самая простая причина блокировки файла – это работающее приложение, которое и блокирует его удаление.

Такое часто бывает, например, с загруженными торрент-клиентом файлами, когда раздача файла препятствует его удалению. Также нередко пользователи пытаются удалить открытый в офисном приложении документ. Решение проблемы в таких случаях очень простое – необходимо закрыть все приложения, которые могут воспроизводить или как-то задействовать удаляемый файл, немного подождать, чтобы приложение успело свернуть все активные процессы, и затем снова попытаться удалить файл.

Перезагрузка компьютера

Может случиться и так, что используемый файл все-равно будет блокирован фоновыми процессами приложения даже при закрытии его главного окна или выхода с помощью меню в системном трее. Файл можно попробовать удалить сразу после перезагрузки компьютера, когда приложение, используемое заблокированный файл, еще не запускалось. В этом случае высока вероятность, что никакие активные фоновые процессы не помешают удалению файла.

Чтобы не тратить время на перезагрузку компьютера, можно попробовать прекратить работу процесса, препятствующего удалению файла, в диспетчере задач. В этом случае потребуется знать, какие именно установленные на компьютере приложения могут использовать в данный момент удаляемый файл.

Диспетчер задач Windows можно вызвать, введя «Диспетчер задач» в поле поиска меню «Пуск» и нажать «Enter», но есть и куда более простой способ – горячие клавиши «Ctrl+Shift+Esc». В списке работающих процессов Windows необходимо отыскать процессы приложений, которые могут использовать удаляемый файл, затем прекратить эти процессы с помощью соответствующей кнопки в окне диспетчера задач.

Этот способ подходит для более опытных пользователей, ведь проводя эксперименты с завершением различных системных процессов, возможно, далеко не тех, что требуются для разблокировки удаляемого файла, можно прекратить работу какого-то процесса, без которого система не сможет полноценно функционировать. Но даже если так и получится, не стоит переживать. В этом случае достаточно перезагрузиться, чтобы нужные системные процессы вновь начали свою работу.

Специальные программы для разблокировки файлов

Специальные небольшие програмы с одной-единственной функцией разблокировки файлов давно стали программами «Must Have» для большинства пользователей ОС Windows. Часто такие утилиты входят в состав файловых менеджеров в числе встроенного софта.

Unlocker или Lock Hunter – эти программы можно скачать в Интернете бесплатно, они минималистично и работают без каких-либо проблем.

Unlocker интегрируется с системой, и эту программу можно легко найти в контекстном меню. Чтобы удалить заблокированный файл, достаточно вызвать на этом файле контекстное меню и выбрать опцию Unlocker.

Затем нужно определиться с командой – переименовать файл, переместить его, просто разблокировать или удалить. В процессе разблокировки Unlocker покажет, какими приложениями файл в данный момент используется.

Lock Hunter также интегрируется с Windows и доступна в контекстном меню системы.

Да и прочий функционал точно такой же – переименование, перемещение, информация о процессах, использующих файл, разблокировка и удаление.

В отличие от Unlocker, программа Lock Hunter не русифицирована, но, учитывая минималистичность функционала, вряд ли использованию программы помешает языковой барьер, тем боле, что интерфейс интуитивно понятен.

Редко, но все же, и программные разблокировщики типа Unlocker или Lock Hunter не справляются с проблемой, обещая удалить заблокированный файл при перезагрузке, но так и не выполняют обещание. Часто с такой ситуацией могут сталкиваться сотрудники корпорации, которые работают в рамках гостевых учетных записей Windows с ограниченными пользовательскими правами.

Удалить заблокированный файл можно попробовать, загрузив Windows в безопасном режиме. Чтобы попасть в этот режим для Windows ХР и 7 во время загрузки (или перезагрузки), нужно жать клавишу F8 и в появившемся меню вариантов загрузки выбрать безопасный режим с загрузкой только основных драйверов и служб.

С Windows 8/8.1 все обстоит несколько сложнее, придется проделать некоторые настройки (обо всех нюансах безопасного режима Windows 8.1 мы уже рассказывали в этой статье с видео). Один из вариантов: в меню «Пуск» или с помощью горячих клавиш «Win+ R» нужно вызвать команду «Выполнить», ввести в ее поле «msconfig» и нажать «Enter».

Во вкладке «Загрузки» нужно отметить галочкой «Безопасный режим» и оставить по умолчанию опцию «Минимальная». Далее – кнопка «Применить».

Во всплывшем окне предупреждения о необходимости перезагрузки системы для вступления в силу изменений нужно нажать кнопку «Перезагрузка».

После перезагрузки система зайдет в безопасный режим. Удалив заблокированный файл, важно не забыть вернуть настройки Windows 8/8.1 во вкладке «Загрузки» в былое состояние, чтобы вновь перезагрузиться уже в обычном режиме работы системы.

Системное программирование в среде Windows Харт Джонсон М

Блокирование файлов

Блокирование файлов

В системах, допускающих одновременное выполнение нескольких процессов, особую актуальность приобретает проблема координации и синхронизации доступа к разделяемым (совместно используемым) объектам, например файлам.

В Windows имеется возможность блокировать файлы (целиком или частично) таким образом, что никакой другой процесс (выполняющаяся программа) не сможет получить доступ к заблокированному участку файла. Блокирование файла может оставлять другим приложениям возможность доступа только для чтения (разделяемый доступ) или же закрывать им доступ к файлу как для записи, так и для чтения (монопольный доступ). Что немаловажно, владельцем блокировки является блокирующий процесс. Любая попытка получения доступа к части файла (с помощью функций ReadFile или WriteFile) в нарушение существующей блокировки закончится неудачей, поскольку блокировки носят обязательный характер на уровне процесса. Любая попытка получения несовместимой блокировки также завершится неудачей, даже если процесс уже владеет данной блокировкой. Блокирование файлов является ограниченной разновидностью синхронизации параллельно выполняющихся процессов и потоков; обсуждение синхронизации с использованием гораздо более общей терминологии начнется в главе 8.

Для блокирования файлов предусмотрены две функции. Более общей из них является функция LockFileEx, менее общей - LockFile, которую можно использовать и в Windows 9x.

Функция LockFileEx относится к классу функций расширенного (extended) ввода/вывода, поэтому для указания 64-битовой позиции в файле и границ области файла, подлежащей блокированию, необходимо использовать структуру OVERLAPPED, которая ранее уже применялась при указании позиции в файле для функций ReadFile и WriteFile.

BOOL LockFileEx(HANDLE hFile, DWORD dwFlags, DWORD dwReserved, DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh, LPOVERLAPPED lpOverlapped)

Функция LockFileEx блокирует участок открытого файла либо для разделяемого доступа (разрешающего доступ одновременно нескольким приложениям в режиме чтения), либо для монопольного доступа (разрешающего доступ только одному приложению в режиме чтения/записи).

Параметры

hFile - дескриптор открытого файла. Дескриптор должен быть создан либо с правами доступа GENERIC_READ, либо с правами доступа GENERIC_READ и GENERIC_WRITE.

dwFlags - определяет вид блокировки файла, а также режим ожидания доступности затребованной блокировки. Этот параметр определяется комбинацией следующих значений:

LOCKFILE_EXCLUSIVE_LOCK - запрос монопольной блокировки в режиме чтения/записи. Если это значение не задано, запрашивается разделяемая блокировка (только чтение).

LOCKFILE_FAIL_IMMEDIATELY - задает режим немедленного возврата функции с возвращаемым значением равным FALSE, если приобрести блокировку не удается. Если это значение не задано, функция переходит в режим ожидания.

dwReserved - значение этого параметра должно устанавливаться равным 0. Следующие два параметра определяют соответственно младшие и старшие 32-битовые значения размера блокируемого участка файла (в байтах).

lpOverlapped - указатель на структуру данных OVERLAPPED, содержащую информацию о начале блокируемого участка. В этой структуре необходимо устанавливать значения трех элементов (остальные элементы игнорируются), первые два из которых определяют смещение начала блокируемого участка от начала файла.

DWORD Offset (используется именно такое имя параметра, а не OffsetLow).

DWORD OffsetHigh.

HANDLE hEvent должен задаваться равным 0.

Чтобы разблокировать файл, следует вызвать функцию UnlockFileEx, все параметры которой, за исключением dwFlags, совпадают с параметрами предыдущей функции:

BOOL UnlockFileEx(HANDLE hFile, DWORD dwReserved, DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh, LPOVERLAPPED lpOverlapped)

Используя блокирование файлов, вы должны принимать во внимание следующие обстоятельства:

Границы области разблокирования должны в точности совпадать с границами ранее заблокированной области. Не допускается, например, объединение двух ранее заблокированных областей или разблокирование части заблокированной области. Любая попытка разблокирования области, не совпадающей в точности с одной из существующих заблокированных областей, будет неудачной. В этом случае функция вернет значение FALSE, а в выведенном системой сообщении об ошибке будет указано, что данная область блокирования не существует.

Вновь создаваемая и существующие области блокирования в файле не могут перекрываться, если это приводит к возникновению конфликтной ситуации.

Возможно блокирование участка, границы которого выходят за пределы файла. Такая операция может оказаться полезной в случае расширения файла процессом или потоком.

Блокировки не наследуются вновь создаваемыми процессами.

Логику процедуры блокирования, когда вся область или только некоторая ее часть уже содержат заблокированные участки, иллюстрирует табл. 3.1.

Таблица 3.1. Логика предоставления блокировки

Логику предоставления возможности выполнения операций чтения/записи во всей или части области файла, содержащей участки с одной или несколькими блокировками, владельцами которых являются другие процессы, иллюстрирует табл. 3.2.

Таблица 3.2. Блокировки и выполнение операций ввода/вывода

Операция ввода/вывода
Существующая блокировка Чтение Запись
Отсутствует Успешно выполняется Успешно выполняется
Разделяемая блокировка (одна или несколько) Выполняется. Вызывающий процесс не обязан быть владельцем блокировки данной области файла. Не выполняется
Монопольная блокировка Выполняется, если вызывающий процесс является владельцем блокировки, в противном случае - неудачное завершение.

Обычно операции чтения и записи выполняются путем вызова функций Read-File и WriteFile или их расширенных версий ReadFileEx и WriteFileEx. Для диагностики ошибок, возникающих в процессе выполнения операций ввода/вывода, следует вызывать функцию GetLastError.

Одна из разновидностей операций ввода/вывода с участием файлов предполагает использование отображения файлов, которое обсуждается в главе 5. Обнаружение конфликтов блокировки на этапе обращения к памяти не производится; такая проверка осуществляется во время вызова функции MapViewOfFile. Указанная функция делает часть файла доступной для процесса, вследствие чего проверка наличия блокировок на этом этапе является необходимой.

Разновидностью функции LockFileEx с ограниченной сферой применимости является функция LockFile, вызов которой, скорее, лишь уведомляет о намерении осуществить блокировку. Эту функцию можно использовать в системах Windows 9x, которые не поддерживают функцию LockFileEx. Функция LockFile предоставляет блокирующему процессу только монопольный доступ, а возврат из функции происходит сразу же. Таким образом, функция LockFile не блокируется. Проверить, предоставлена блокировка или нет, можно путем тестирования возвращаемого функцией значения.

Снятие блокировок

Каждый успешный вызов функции LockFileEx должен сопровождаться последующим вызовом функции UnlockFileEx (то же самое касается и пары функций LockFile и UnlockFile). Если программа не позаботится о снятии блокировки или будет удерживать ее в течение большего, чем это необходимо, времени, другие программы либо вовсе не смогут работать, либо будут вынуждены простаивать. Поэтому уже на стадии проектирования и реализации программ необходимо очень тщательно следить за тем, чтобы снятие блокировки осуществлялось сразу же после того, как необходимость в ней отпала, а логика работы программ не позволяла оставлять невыполненными необходимые операции разблокирования файлов.

Одним из способов, гарантирующих своевременное разблокирования файлов, является использование дескрипторов завершения (termination handlers), которые описаны в главе 4.

Из книги Компьютер на 100. Начинаем с Windows Vista автора Зозуля Юрий

Блокирование активного содержимого Веб-страницы могут содержать не только тексты и рисунки, но и специальные программные модули, расширяющие возможности веб-страниц и позволяющие сделать их интерактивными. Однако в то же время этими средствами могут воспользоваться

Из книги ArchiCAD 11 автора Днепров Александр Г

Блокирование объектов В заключение главы, посвященной редактированию объектов, упомяну о механизме, позволяющем избежать случайного изменения объектов или их свойств. В ArchiCAD имеется способ заблокировать необходимые объекты от редактирования. Для этого следует

Из книги ArchiCAD. Начали! автора Орлов Андрей Александрович

Блокирование объектов В заключение главы, посвященной редактированию объектов, упомянем о механизме, позволяющем избежать случайного изменения объектов или их свойств. В ArchiCAD есть способ защитить необходимые объекты от редактирования. Для этого следует выделить их и

Из книги Самоучитель работы на компьютере автора Колисниченко Денис Николаевич

17.4.7. Блокирование нежелательных корреспондентов Если вам надоел какой-то корреспондент и вы больше не хотите получать от него письма, можете внести его в список блокируемых. Для этого щелкните на любом письме от этого корреспондента и выполните команду меню Сообщение,

Из книги Установка и настройка Tor автора Стручков Юрий

11. Блокирование Tor и как с ним бороться Система Tor позволяет скрывать от провайдера конечные (целевые) адреса, тем самым прорывая возможную блокаду доступа к заблокированным им сетевым ресурсам. Также система Tor скрывает от целевых ресурсов адрес отправителя, тем самым

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

ГЛАВА 9 Блокирование записей

Из книги Системное программирование в среде Windows автора Харт Джонсон М

9.2. Блокирование записей и файлов Ядро Unix никак не интерпретирует содержимое файла, оставляя всю обработку записей приложениям, работающим с этим файлом. Тем не менее для описания предоставляемых возможностей используется термин «блокировка записей». В

Из книги Linux программирование в примерах автора Роббинс Арнольд

9.8. Блокирование файлов Стандарт Posix.1 гарантирует, что если функция open вызывается с флагами O_CREAT (создать файл, если он еще не существует) и O_EXCL (исключающее открытие), функция возвращает ошибку, если файл уже существует. Более того, проверка существования файла и его

Из книги Дело о реформе копирайта автора Энгстрём Кристиан

9.9. Блокирование в NFS Аббревиатура NFS расшифровывается как Network File System (сетевая файловая система); эта система подробно обсуждается в главе 29 . Блокировка записей fcntl представляет собой расширение NFS, поддерживаемое большинством ее реализаций. Обслуживается эта

Из книги Операционная система UNIX автора Робачевский Андрей М.

10.7. Блокирование файлов Вернемся к задаче о порядковом номере из главы 9. Здесь мы напишем новые версии функций my_lock и my_unlосk, использующие именованные семафоры Posix. В листинге 10.10 приведен текст этих функций.Листинг 10.10. Блокирование файла с помощью именованных семафоров

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

11.6. Блокирование файлов С помощью семафоров System V можно реализовать еще одну версию функций my_lock и my_unlock из листинга 10.10. Новый вариант приведен в листинге 11.6.Листинг 11.6. Блокировка файлов с помощью семафоров System V//lock/locksvsem.c1 #include "unpipc.h"2 #define LOCK_PATH "/tmp/svsemlock"3 #define MAX_TRIES

Из книги автора

Блокирование файлов В системах, допускающих одновременное выполнение нескольких процессов, особую актуальность приобретает проблема координации и синхронизации доступа к разделяемым (совместно используемым) объектам, например файлам.В Windows имеется возможность

Из книги автора

14.2.3. Блокирование BSD: flock() 4.2 BSD представило свой собственный механизм блокировки, flock(). Функция объявлена следующим образом:#include /* Обычный */int flock(int fd, int operation);Дескриптор fd представляет открытый файл. Имеются следующие операции:LOCK_SH Создает совместную

Из книги автора

Цензура и блокирование интернета http://habrahabr.ru/post/155295/Этапы введения цензуры в интернете 2007–201218 октября 2012 в 19:22.Копирайт: Dura Lex.Глядя на то, как в отдельных областях России блокируется youtube и ubuntu, я не мог не вспомнить, как Кристиан Энгстрём и Рик Фальквинге в брошюре,

Из книги автора

Блокирование доступа к файлу Традиционно архитектура файловой подсистемы UNIX разрешает нескольким процессам одновременный доступ к файлу для чтения и записи. Хотя операции записи и чтения, осуществляемые с помощью системных вызовов read(2) или write(2), являются атомарными, в

Блокировки файлов

Блокировки файлов и отдeльных записeй в файлах являются срeдством синхронизации мeжду работающими в коопeрации процeссами, пытающимися использовать один и тот жe файл одноврeмeнно.

Процeссы могут имeть соотвeтствующиe права доступа к файлу, но одноврeмeнноe использованиe этих прав (в особeнности права записи) можeт привeсти к нeкоррeктным рeзультатам. Примeром такой ситуации являeтся одноврeмeнноe рeдактированиe одного и того жe докумeнта нeсколькими пользоватeлями. Eсли доступ к файлу нe управляeтся блокировками, то каждый пользоватeль, который имeeт право записи в файл, работаeт со своeй копиeй данных файла. Рeзультат такого рeдактирования нeпрeдсказуeм -- он зависит от того, в какой послeдоватeльности записывали измeнeния в файл примeняeмыe пользоватeлями приложeния-рeдакторы.

Многопользоватeльскиe опeрационныe систeмы обычно поддeрживают спeциальный систeмный вызов, позволяющий программисту установить и провeрить блокировки на файл и eго отдeльныe области. В UNIX такой систeмный вызов называeтся fcntl. В eго аргумeнтах указываeтся дeскриптор файла, для которого нужно установить или провeрить блокировки, тип опeрации (блокированиe или провeрка, блокированиe доступа для чтeния или для записи), а такжe область блокирования -- смeщeниe от начала файла и размeр в байтах. При провeркe наличия блокировок, установлeнных другими процeссами, вызов fcntl нeмeдлeнно возвращаeт управлeниe с сообщeниeм рeзультата. При установкe блокировки можно задать два рeжима работы систeмного вызова: с пeрeходом процeсса в состояниe ожидания в том случаe, eсли блокировку установить нeвозможно (синхронный систeмный вызов), и с нeмeдлeнным возвратом в такой ситуации с сообщeниeм отрицатeльного рeзультата (асинхронный вызов). Запрошeнная блокировка записи нe можeт быть установлeна в том случаe, eсли другой процeсс ужe установил свою блокировку записи на тот жe файл. То eсть блокировка записи являeтся исключитeльной. Блокировки чтeния нe являются исключитeльными и могут устанавливаться на файл в том случаe, eсли их области дeйствия нe пeрeкрываются. Eсли на какую-то область файла установлeна блокировка чтeния, то на эту область нeльзя установить блокировку записи. В UNIX сущeствуют два рeжима дeйствия блокировок -- консультативный (advisory) и обязатeльный (mandatory). Основным рeкомeндуeмым для использования рeжимом являeтся консультативный. При нeм опeрационная систeма нe занимаeтся блокированиeм опeраций с файлом, а только устанавливаeт признаки блокирования областeй в структурах file, поддeрживающих опeрации с файлами. Коопeрирующиeся процeссы обязатeльно должны провeрять наличиe блокировок на файл, чтобы синхронизировать свою работу. Eсли жe блокировки установлeны, но процeсс нe провeряeт их, то опeрационная систeма нe запрeщаeт доступ процeсса к файлу, когда процeсс дeлаeт систeмныe вызовы read или write.

В обязатeльном рeжимe запрeт на выполнeниe опeрации с заблокированным файлом поддeрживаeт опeрационная систeма, поэтому процeсс в любом случаe нe получит доступа к такому файлу. Однако при работe в этом рeжимe опeрационная систeма тратит много усилий и врeмeни на eго поддeржаниe, поэтому обычно он нe рeкомeндуeтся.