Linux O_PATH文件描述符的语义?
Linux 2.6.39引入了O_PATH打开模式,(粗略地说)根本没有真正打开文件(即不创建打开的文件描述),而只是提供了一个文件描述符,它是未打开目标的句柄.它的主要用途是作为* at函数(openat等)的参数,它似乎适合作为Linux以前缺少的POSIX 2008 O_SEARCH功能的实现.但是,我一直无法找到关于O_PATH的确切语义的任何好的文档.我有几个具体问题:
> Linux O_PATH文件描述符可以进行哪些操作? (只有*在函数?) 解决方法
使用open(目录,O_PATH | O_DIRECTORY)获得的文件描述符不仅对… at()函数有用,而且对于fchdir()(因为内核版本为3.2.23,我相信).
最近patch还有一个新的系统调用, 我说O_PATH现在只对目录有用;文件使用可能会在将来找到.除了未来fbind()或类似的未来系统调用的可能性之外,我不知道对使用O_PATH打开的文件使用文件描述符.甚至fstatvfs()至少在3.5.0内核上也行不通. 在Linux中,只有在最后打开的文件描述符关闭时才会释放inode(文件内容和元数据).删除(取消链接)文件时,只删除与inode关联的文件名.因此,有两个独立的文件系统对象与文件描述符相关联:用于打开对象的名称和引用的底层索引节点.该名称仅用于路径解析,即调用open()(或等效)时.所有数据和元数据都在inode中. 使用O_PATH获得的文件描述符与普通文件描述符wrt一样(至少在内核3.5.0上).移动和重命名用于打开描述符的名称或名称组件. (描述符保持有效,因为它引用了inode,并且文件名对象仅在路径解析期间使用.保持描述符打开将保持分配inode资源,即使描述符已打开O_PATH.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |