如何从现有的文件描述符创建新的文件描述符,使新描述符不共享文件表中相同的内部文件结构/条目?具体而言,文件偏移量(最好是权限、共享和模式)等属性不应在新的和旧的文件描述符之间共享。
在Windows和Linux下,dup()都会复制文件描述符,但是这两个描述符仍然指向进程文件表中相同的文件结构。对任一描述符的任何查找都将调整其他描述符的位置。
Note
从那以后,我收到了Windows和Linux的答案,并且经常调整这个问题,这使得人们很难回答。我将调整我的投票,接受最干净的答案,包括Windows和Linux。向大家道歉,我对SO范式还不熟悉。谢谢你给我的答案!
发布于 2009-10-21 03:59:42
所以,我建议多读一点这方面的内容。dup()和相关函数用于在文件描述符表中创建一个重复值,指向打开的文件表中的相同条目。这是打算使用的具有相同偏移量。如果您调用open(),您将创建一个新条目--打开的文件表。
创建文件描述符的副本没有任何意义,而且新的文件描述符在打开的文件表中有不同的偏移量(这似乎与“重复”一词的意思相矛盾)。
我不知道你的问题到底是什么。我是说,这和复制不一样。你可以读到:
/proc/self/fd/[descriptor]
并获取用于打开该文件描述符的字符串;请记住,这可能会带来一些缺陷,其中一些您在再次调用open()时实际上已经注意到了。
也许你可以解释的更多,我可以尝试更新,以帮助。
发布于 2009-10-29 10:24:31
为什么不直接在windows上打开打开()或CreateFile()的文件呢?这给了您不同的访问权限和单独的偏移量的自由。
当然,这有一个缺点,即您不能单独打开文件,但它非常简单地解决了您的问题。
https://stackoverflow.com/questions/1598586
复制相似问题