Quando um programa quer garantir que seja o criador de um arquivo?

1

Da interface de programação do Linux

If a program must ensure that it is the creator of a file, then the O_EXCL flag should be used when calling open()

Eu queria saber quando "um programa deve garantir que é o criador de um arquivo"?

Está relacionado aos casos em que o programa deseja que o proprietário de um arquivo seja o ID efetivo de um processo que está executando o programa?

Para um determinado arquivo, uma vez que podemos modificar o proprietário de um arquivo, como posso descobrir o criador do arquivo?

    
por Tim 08.09.2018 / 22:07

1 resposta

4

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.)

    
por 09.09.2018 / 02:55

Tags