Есть ли в Linux / GCC поддержка типа запрета совместного доступа к файлам? - PullRequest
1 голос
/ 13 октября 2019

В DOS, Borland C / C ++ у вас было O_DENYxxx флагов, доступных на open(). В MS Visual Studio / Windows у вас есть sopen(), некоторые разновидности open() имеют доступные флаги O_SHARE_xxxx (например, ibm docs). Но я не могу найти то, что Linux имеет в наличии, которая работает так же?

1 Ответ

1 голос
/ 13 октября 2019

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

Однако существуют средства блокировки, как с fcntl, так и с flock, которые позволяютвзаимодействующие процессы для блокировки чтения и записи файла или его частей для предотвращения непреднамеренных конфликтов. - это обязательная блокировка, которую можно выполнить с помощью fcntl, но она ненадежна и не рекомендуется для ядра 4.5;вы можете увидеть справочную страницу fcntl(2) для более подробной информации. Если ваша программа когда-либо будет работать по NFS, для блокировки предпочтительнее будет fcntl, потому что flock там не работает.

В качестве альтернативы, если вам нужен более простой интерфейс, вы можете использовать что-то вроде liblockfile , который обеспечивает простой, NFS-безопасный интерфейс для блокировки.

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

...