Я хотел бы знать, существует ли стандартная гарантия 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, или ОС может кэшировать запись, чтобы она не распространялась во времени? Мы можем предположить, что ни один другой процесс не знает имя файла или иным образом не искажает поиск файла.
close
? - person Kerrek SB   schedule 03.04.2012echo "Some data" >> $FILE
. Я не нашел никаких подсказок в стандарте POSIX, кроме вызова fflush, который также присутствует в стандарте C. - person Luca Martini   schedule 03.04.2012