懂视

file结构体

2024-12-29 14:27:52

系统大全为您提供structfile,定义于,是设备驱动中第二个最重要的数据结构。注意file与用户空间程序的FILE指针没有任何关系。一个FILE定义在C库中,从不出现在内核代码中。一个structfile,另一方面,是一个内核结构,从不出现在用户程序中。文件结构代表一个打开的文件。(它不特定给设备驱动;系统中每个打开的文件有一个关联的structfile在内核空间)。它由内核在open时创建,并传递给在文件上操作的任何函数,直到最后的关闭。在文件的所有实例都关闭后,内核释放这个数据结构。在内核源码中,structfile的指针常常称为file或者filp("filepointer")。我们将一直称这个指针为filp以避免和结构自身混淆。因此,file指的是结构,而filp是结构指针。structfile的最重要成员在这展示。1.mode_tf_mode;文件模式确定文件是可读的或者是可写的(或者都是),通过位FMODE_READ和FMODE_WRITE.你可能想在你的open或者ioctl函数中检查这个成员的读写许可,但是不需要检查读写许可,因为内核在调用你的方法之前检查。当文件还没有为那种存取而打开时读或写的企图被拒绝,驱动甚至不知道这个情况。2.loff_tf_pos;当前读写位置。loff_t在所有平台都是64位(在gcc术语里是longlong)。驱动可以读这个值,如果它需要知道文件中的当前位置,但是正常地不应该改变它;读和写应当使用它们作为最后参数而收到的指针来更新一个位置,代替直接作用于filp->f_pos.这个规则的一个例外是在llseek方法中,它的目的就是改变文件位置。3.unsignedintf_flags;这些是文件标志,例如O_RDONLY,O_NONBLOCK,和O_SYNC.驱动应当检查O_NONBLOCK标志来看是否是请求非阻塞操作;其他标志很少使用。特别地,应当检查读/写许可,使用f_mode而不是f_flags.所有的标志在头文件中定义。4.structfile_operations*f_op;和文件关联的操作。内核安排指针作为它的open实现的一部分,接着读取它当它需要分派任何的操作时。filp->f_op中的值从不由内核保存为后面的引用;这意味着你可改变你的文件关联的文件操作,在你返回调用者之后新方法会起作用。例如,关联到主编号1(/dev/null,/dev/zero,等等)的open代码根据打开的次编号来替代filp->f_op中的操作。这个做法允许实现几种行为,在同一个主编号下而不必在每个系统调用中引入开销。替换文件操作的能力是面向对象编程的"方法重载"的内核对等体。5.void*private_data;open系统调用设置这个指针为NULL,在为驱动调用open方法之前。你可自由使用这个成员或者忽略它;你可以使用这个成员来指向分配的数据,但是接着你必须记住在内核销毁文件结构之前,在release方法中释放那个内存。private_data是一个有用的资源,在系统调用间保留状态信息,我们大部分例子模块都使用它。6.structdentry*f_dentry;关联到文件的目录入口(dentry)结构。设备驱动编写者正常地不需要关心dentry结构,除了作为filp->f_dentry->d_inode存取inode结构。真实结构有多几个成员,但是它们对设备驱动没有用处。我们可以安全地忽略这些成员,因为驱动从不创建文件结构;它们真实存取别处创建的结构。   以上就是系统大全给大家介绍的如何使的方法都有一定的了解了吧,好了,如果大家还想了解更多的资讯,那就赶紧点击系统大全官网吧。  本文来自系统大全http:///如需转载请注明!推荐:win7纯净版