s operações de E / S Posix em nomes de arquivos são sequencialmente coerente
Gostaria de saber se existe uma garantia padrão Posix de que as modificações em um arquivo sejam visíveis através de repetidasopen
/close
chama o mesmo nome de arquivo. Para exposição, considere este script Bash:
#!/bin/bash
FILE=$(mktemp)
echo "Some data" >> $FILE
cat $FILE
É garantido que até o momentoecho
termina, todos os dados estão disponíveis no arquivo?
Em termos de funções Posix, um exemplo pode ser assim:
const char fn[] = "/tmp/somefile";
const char data[] = "hello world";
// Stage 1
{
int fd = open(fn, O_CREAT);
write(fd, data, sizeof data); // #1
close(fd);
}
// Stage 2
{
int fd = open(fn);
read(fd, ...); // #2
close(fd);
}
É garantido que a gravação na linha 1 é visível para a leitura 2 ou o sistema operacional pode armazenar em cache a gravação para que não se propague a tempo? Podemos supor que nenhum outro processo saiba o nome do arquivo ou subverta a pesquisa do arquiv