![]() |
1
12
所以基本上,你真正想要的是得到一个文件描述符,然后再次打开同一个文件,得到一个单独的位置、共享、模式等,你想要在Windows上这样做(在Windows中,“文件描述符”基本上是一个外来对象,而不是操作系统直接使用的对象 或 运行时库。 令人惊讶的是,那里 是 一种实现这一点的方法,至少使用MS VC++。除了两个步骤外,所有步骤都只使用win32 API,因此移植到其他编译器/库应该是相当合理的(我认为这两个函数的大多数版本都提供了)。它们用于将Unix样式的文件描述符转换为本机win32文件句柄,并将本机win32文件句柄转换回Unix样式的文件描述符。
埃特维尔石油公司 ,我们有一个新的文件描述符引用同一个文件,但是它有自己的权限、位置等。 在问题的最后,您让它听起来像您还需要“权限”,但这似乎没有任何实际意义——权限附加到文件本身,而不是文件的打开方式,因此打开或重新打开文件对文件的权限没有影响。如果您真的想知道,可以通过getfileinformationByhandle获得它,但是请注意,Windows中的文件权限与UNIX中的(传统)文件权限有很大的不同。Unix对所有文件都有所有者/组/世界权限,大多数系统也有ACL(尽管它们的工作方式有更多的变化)。Windows或者根本没有权限(例如,FAT或FAT32上的文件),或者使用ACL(例如,NTFS上的文件),但是没有任何东西真正等同于大多数人在Unix上习惯的传统所有者/组/世界权限。 也许您正在使用“权限”来指代该文件是为读、写还是同时打开。这比前面的任何一个都要糟糕得多。问题是,它的大部分都在库中,而不是在win32中,所以可能没有办法做到这一点,这甚至接近于编译器之间的可移植性。使用MS VC++9.0 SP1(不保证 任何 其他编译器)可以这样做:
因为这涉及到一些洞穴探险,我写了一个快速测试来验证它是否真的有效:
结果似乎表明成功:
然后,您可以测试返回的标志与stdio.h中定义的“旧”、“旧”和“旧”进行对比。尽管我以前警告过,但我可能应该指出,我怀疑(尽管我当然不能保证)库的这一部分相当稳定,因此进行重大更改的真正机会可能相当小。 然而,在另一个方向,基本上没有机会 完全 它可以和其他图书馆一起使用。它 能够 (但当然不能保证)与其他使用MS库的编译器一起工作,如Intel、Mingw或Comeau,使用MS VC++作为后端。其中,我想说最有可能工作的是科莫,最不可能是明格(但这只是一个猜测;很有可能它不会与任何人一起工作)。
|
![]() |
2
2
所以,我建议多读一点。这个
创建文件描述符的副本毫无意义,新的文件描述符在打开的文件表中有不同的偏移量(这似乎与“副本”一词的含义相矛盾)。 我不知道你的问题到底是什么。我是说,这和复制品不一样。你可以阅读:
并获取用于打开该文件描述符的字符串;请记住,这可能会提供一些陷阱,其中一些陷阱是您在观察调用时实际注意到的
也许你可以解释更多,我可以尝试更新帮助。 |
![]() |
3
0
为什么不在Windows上用open()或createfile()再次打开文件?这将给您所有不同访问权限和单独偏移的自由。 当然,这有一个缺点,即您不能以独占方式打开文件,但它可以很简单地解决您的问题。 |
![]() |
sk123 · Shell脚本-如何在循环中显示变量名及其值 1 年前 |
|
sai · unix中使用python进行数据重组 1 年前 |
![]() |
FangQ · 如何使用jq打印由制表符“\t”分隔的JSON数组元素 1 年前 |
|
ROHAN · 我想显示包含一个括号的行,包括它的开头或结尾 1 年前 |
![]() |
Geomicro · 删除模式sed之间的逗号 1 年前 |