Я хотел бы знать, существует ли стандартная гарантия Posix, что изменения файла гарантированно будут видны при повторных вызовах open
/ close
для одного и того же имени файла.Для ознакомления рассмотрим следующий сценарий Bash:
#!/bin/bash
FILE=$(mktemp)
echo "Some data" >> $FILE
cat $FILE
Гарантируется ли, что к концу echo
все данные будут доступны в файле?
В терминах функций PosixПример может быть таким:
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);
}
Гарантируется ли, что запись в строке # 1 видима для чтения # 2, или операционная система может кэшировать запись, чтобы она не распространялась во времени?Мы можем предположить, что никакой другой процесс не знает имя файла или иным образом подрывает поиск файла.