O sinalizador O_EXCL, usado em conjunto com o sinalizador O_CREAT, significa que, se o arquivo já existir, a chamada open
falhará. Se o arquivo não existir, será feita uma tentativa de criá-lo e abri-lo.
Um uso para isso é criar um arquivo de bloqueio simples. Se vários processos tentarem abrir o mesmo arquivo com os sinalizadores O_CREAT e O_EXCL, um será bem-sucedido e o restante falhará. Obviamente, se o arquivo já existir, por exemplo, porque um processo anterior foi encerrado sem remover o arquivo, nenhum das tentativas subseqüentes terá êxito, portanto, essa não é a maneira mais robusta de gerenciar um bloqueio. / p>
Outro uso é criar um arquivo para gravação no qual o processo está confiante de que nenhum outro processo gravará. Você pode usar isso se estiver criando um arquivo em /tmp
, em que muitos outros processos estão criando arquivos com nomes semelhantes, possivelmente idênticos. A função mkstemp
no glibc chama open
com os sinalizadores O_CREAT e O_EXCL.
O Unix / Linux não grava o criador de um arquivo (pode haver um registro de auditoria emitido se o sistema operacional o suportar.)