Por que o flock (1) pode bloquear entre processos?

0

flock está associado à descrição open-file, e open (2) cria uma nova descrição open-file. Portanto, invocar o flock (1) em dois shells separados abrirá o arquivo de bloqueio separadamente e resultará em duas descrições de arquivo aberto. Como poderia flock (1) saber o status de bloqueio associado a cada descrição de arquivo aberto? Estou confuso... Além disso, o flock (1) trata o nome do caminho e o descritor de arquivo de maneira diferente?

ATUALIZAÇÃO:

O bando de que falo é o do Linux.

No meu entender, a estrutura representando o bando é única em todo o sistema. Uma ou mais descrições de arquivos abertos podem fazer referência a uma estrutura flock (como o relacionamento entre open-file-description e i-node). O meu 'guess' está correcto?

    
por Timothy Kwok 09.05.2018 / 11:04

1 resposta

3

Não, flock , que é um wrapper na chamada do sistema flock() , bloqueia arquivos, não descritores de arquivos.

O manual do OpenBSD para flock() diz (minha ênfase):

flock() applies or removes an advisory lock on the file associated with the file descriptor fd.

[...]

Locks are on files, not file descriptors. That is, file descriptors duplicated through dup(2) or fork(2) do not result in multiple instances of a lock, but rather multiple references to a single lock. If a process holding a lock on a file forks and the child explicitly unlocks the file, the parent will lose its lock.

flock() é uma chamada do sistema; o kernel controla os bloqueios.

    
por 09.05.2018 / 11:19

Tags