Linuxプログラミングインターフェースから
もしプログラムは自分がファイルを作成した人であることを確認する必要があります。、open()を呼び出すときにO_EXCLフラグを使用する必要があります。
「プログラムがファイル作成者であることを確認する必要がある場合」がいつであるかを知りたいです。
これは、プログラムがファイル所有者がプログラムを実行しているプロセスの有効なIDであると予想する場合に関連していますか?
特定のファイルのファイル所有者を変更できるので、ファイル作成者をどのように見つけることができますか?
答え1
O_CREAT フラグで使用される O_EXCL フラグは、ファイルがすでに存在する場合に呼び出しがopen
失敗することを意味します。ファイルが存在しない場合は、ファイルを作成して開こうとします。
その目的の1つは、単純なロックファイルを作成することです。複数のプロセスがO_CREATフラグとO_EXCLフラグを使用して同じファイルを開こうとすると、1つのプロセスは成功し、残りのプロセスは失敗します。もちろん、ファイルがすでに存在する場合、例えば、前のプロセスがファイルを削除せずに終了したためまったくその後の試みは成功するので、これはロックを管理する最も信頼性の高い方法ではありません。
別の用途は、プロセスが他のプロセスが書き込めないと確信しているファイルに書き込むためのファイルを作成することです。/tmp
他の多くのプロセスが、類似した(おそらく同じ)名前のファイルを生成するサーバーからファイルを生成する場合は、このオプションを使用できます。mkstemp
glibc の関数は、open
O_CREAT および O_EXCL フラグを使用して呼び出されます。
Unix / Linuxはファイル作成者を記録しません(オペレーティングシステムでサポートされている場合は監査ログが発行される可能性があります)。