open
ファイルへの変更が、同じファイル名で/を繰り返しclose
呼び出すことで確実に表示されるという Posix 標準の保証があるかどうかを知りたいです。説明のために、次の 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 に表示されることが保証されていますか?それとも、OS が書き込みをキャッシュして、時間内に伝播しないようにすることはできますか? 他のプロセスがファイル名を認識していないか、ファイル検索を妨害していないと想定できます。