UNIX では、次のように追加モードでファイルを開くと
fd = open("filename", O_APPEND);
次に、そのようなファイル記述子が与えられると、それがどのフラグで開かれたかを次のように使用して簡単に見つけることができますfcntl
。
fcntl(fd, F_GETFL) & O_APPEND
Windowsでは利用できないことは知ってfcntl
いますが、これを判断する方法があるのだろうか. Windows は、たとえばフラグを使用してファイルを作成しCreateFile
、渡すときに、追加モードを明確にサポートしています。FILE_APPEND_DATA
しかし、すでに開いているファイルへのハンドルしか持っていない場合、ファイルが最初に開かれたときにどのアクセス権が要求されたかを判断する方法を見つけることはできません。 この質問は、特定のファイルへのアクセス権をチェックするための基本的なレシピを提供しますが、それは役に立たないようです。私はそれを試してみましたが、読み取り専用モードでファイルを開いても、要求した場合、ファイルへのFILE_APPEND_DATA
アクセス権があることがわかります。つまり、このメソッドは、プロセスが特定のファイルに対してどのようなアクセス権を持っているか (プロセスを開始したユーザーから継承されたもの) を教えてくれるだけです。ファイルが開かれたときに要求された正確なアクセスについては何も述べていません。
これは、Windows がファイルを追加するだけかどうかを追跡する方法とは関係ありません。そして、どこにも答えが見つからないのは後者の質問です。私が見つけた最も近いものはGetFileInformationByHandleEx ですが、ドキュメントを調べた後、「追加モード」を示唆するその API を介して返すことができるファイル属性は 1 つもありません。
更新:私の質問をもう少し明確にするために、この質問は実際にはMS VCランタイムライブラリに適用されます-POSIXのような関数で開かれ、_open
などに書き込まれるファイルfwrite
。ネイティブの win32 ファイル ハンドルには「追加モード」の概念がないようです。