Dois processos podem ter o mesmo filehandle aberto para gravação. Assim como com qualquer coisa, a última execução vence.
Quando um processo abre um filehandle, algum outro processo grava 80 linhas nele, o buffer de memória do primeiro processo não terá essas 80 linhas. Se ele gravar o buffer no filehandle, o conteúdo do arquivo será apenas o que estava no segundo buffer de memória.
Agora, muitos desses programas detectam que o conteúdo original do arquivo mudou desde a última vez em que foi aberto. Alguns se recusarão a escrever, alguns solicitarão que você recarregue o buffer. Alguns podem fazer outra coisa. Cabe a cada programa para se certificar de que faz a coisa certa. O kernel / sistema de arquivos não se importa, e para todos, ele sabe que o buffer de memória que falta 80 linhas é a cópia correta .
Agora, se for algo significativamente mais importante, digamos, um banco de dados, em vez de apenas um arquivo de texto ou documento no diretório inicial, é muito mais provável que o bloqueio de arquivos seja usado (o que também não significa que vim
ou gedit
não usam bloqueios). Um banco de dados provavelmente terá seu próprio mecanismo de bloqueio interno.
A filosofia geral em plataformas de estilo UNIX é ser cooperativa em relação às gravações de filehandle. O bloqueio não é um mecanismo de controle de segurança (é para isso que as permissões / ACLs são), é um mecanismo de integridade de dados. Dois programas que desejam gravar dados geralmente querem garantir que os dados sejam gravados corretamente, portanto, é benéfico respeitar os bloqueios uns dos outros. O kernel / sistema de arquivos avisará sobre bloqueios, mas ainda assim permitirá que cada processo faça o que achar melhor. No entanto, o Linux suporta a aplicação de bloqueio obrigatório como uma opção de montagem (isso também pode exigir suporte ao sistema de arquivos, mas não tenho certeza disso).
Você pode ler mais informações sobre bloqueios no artigo sobre bloqueio de arquivos da Wikipedia .