是的,它被称为NtCreateFile()(https://msdn.microsoft.com/en-us/library/bb432380(v=vs.85).aspx ) :)
openat()将一个打开的fd带到路径操作开始的基目录.类似地,您可以向ObjectAttributes.RootDirectory提供一个HANDLE,以使NtCreateFile()该目录的路径可用作相对路径操作的基础.
如果直接转到NT内核API对你来说太过分了,而你想保留在Win32中,你可以很容易地检索基本目录HANDLE的当前路径(参见https://msdn.microsoft.com/en-us/ library/windows/desktop/aa366789(v = vs.85).aspx).如果您打开没有FILE_SHARE_DELETE权限的目录,则任何人都无法重命名,因此只要您将HANDLE保持打开状态,检索到的路径就不会移动.
然后使用正常的字符串连接将检索到的路径与相对路径拼接在一起.
NT内核API方法是Windows上唯一允许基本目录HANDLE由第三方进程任意重命名并且不会导致代码竞争的解决方案.即它是POSIX唯一的等价物openat().我同意,非常不幸的是,Win32没有提供这种功能 - 实际上,Win32没有提供原子重命名,这是一个非常有用的POSIX工具,确实可以让你避免锁定文件,这也是NT内核API提供的东西.
| 归档时间: |
|
| 查看次数: |
658 次 |
| 最近记录: |