在 UNIX 中,如果我以附加模式打开文件,例如
fd = open("filename", O_APPEND);
然后给定这样一个文件描述符,我们可以很容易地找出它是用什么标志打开的fcntl
:
fcntl(fd, F_GETFL) & O_APPEND
我知道这fcntl
在 Windows 上不可用,但我想知道是否有某种方法可以确定这一点。Windows 确实支持附加模式,例如在创建带有标志的文件CreateFile
并传入FILE_APPEND_DATA
标志时。
但是,如果我所拥有的只是一个已打开文件的句柄,那么我终生无法找到一种方法来确定首次打开文件时请求的访问权限。 这个问题提供了检查对特定文件的访问权限的基本方法,但这似乎没有帮助。我试过了,即使我以只读模式打开一个文件,它仍然告诉我如果我要请求它,我可以FILE_APPEND_DATA
访问该文件。换句话说,这个方法只告诉我进程对特定文件的访问权限(继承自启动进程的用户)。它没有说明打开文件时请求的确切访问权限。
这与 Windows 如何跟踪文件是否应仅附加到无关。正是后一个问题,我在任何地方都找不到答案。我发现的最接近的东西是GetFileInformationByHandleEx但是在梳理文档之后,没有一个文件属性可以通过该 API 返回,表明“附加模式”。
更新:为了更好地澄清我的问题,这个问题实际上只适用于 MS VC 运行时库——使用类似 POSIX 的函数打开_open
并写入 withfwrite
等的文件。似乎本机 win32 文件句柄没有“附加模式”的概念。