我想知道是否有 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 可见,或者操作系统是否可以缓存写入以使其不会及时传播?我们可以假设没有其他进程知道文件名或以其他方式破坏文件查找。