私は2つのプロセスによってアクセスされるファイルfoo.hex
を持っています。 1つのプロセスはO_RDONLY
のアクセス権を持ち、もう1つのプロセスはO_RDWR
アクセス権を持ちます。原子的に開いてロックするファイル
初めてシステムを起動するときは、書き込みプロセスが初期化する前に、読み取りプロセスでファイルにアクセスするべきではありません。
このように、私はファイルを初期化するためにこのようなものを書きました。まだそれが初期化される前に、ファイルにアクセスするには、読者のプロセスに可能性を残し
fd = open("foo.hex", O_RDWR|O_CREAT, 0666);
flock(fd, LOCK_EX);
init_structures(fd);
flock(fd, LOCK_UN);
。
open()
とflock()
へのアトミックな方法が見つかりませんでした。ミューテックスの他に、できるだけオーバーヘッドの少ないエレガントな方法で私の目標を達成するための他の可能性があります(これは初めてシステムを起動するときに初めて使用されるためです)。
これは実際の問題ではありませんが、ライターで 'open(" foo.hex "、O_RDWR | O_CREAT | O_EXCL、0666)'を使用したい場合があります。 – zwol
@zwol右、実際にはO_CREAT、0666で開きますが、競合状態の問題は変わりません。 –
覚えておいてください: 'flock()'ロックは勧告であり、必須ではありませんので、あるプロセスにロックを適用した後でも、ロックを無視すれば、 –