当前位置:  技术问答>linux和unix

请高手指教一下进程打开的File对象相关的几个问题

    来源: 互联网  发布时间:2016-04-09

    本文导语:  网上搜了几天没有结果,看了些相关的书也没整明白,还望高人相助。具体的问题如下: 1.进程打开的每一个文件都对应一个File对象,该对象中有一个成员struct  file_operations  *f_op,该结构里的函数指针所指向的函...

网上搜了几天没有结果,看了些相关的书也没整明白,还望高人相助。具体的问题如下:
1.进程打开的每一个文件都对应一个File对象,该对象中有一个成员struct  file_operations  *f_op,该结构里的函数指针所指向的函数是具体的文件系统(打开的是普通文件)或驱动程序(打开的是设备文件)里实现的函数吗?当用户进程调用read等系统调用时,实际执行的应该是f_op结构中的函数吧?也就是说当对该文件进行进行操作时都是通过File对象来进行的,对吗?
2.File对象中的f_op指针的赋值问题,看到一篇文章说的是File中的f_op从该文件的inode结构i_fop得来,而该文件的inode结构中的i_fop是在open文件时从磁盘读入inode结点内容,判断是普通文件,目录或设备后采取不同方式进行赋值的,对于设备而言要用到inode->dev中的操作表。我想知道的是对File中的f_op赋值的流程是不是只有上面一种,一般情况下有没有其他的获得该f_op的方法,比如在chrdevs表中也注册了设备驱动的操作函数,会不会从那里获得f_op?还有inode中的i_fop都是要在open文件时才初始化吗?
3.register_chrdev和device_register,driver_register都啥关系呀,呵呵,大概说两句就行,剩下的自己看。
哎,一头雾水啊。

|
  进程打开的每一个文件内核都会创建一个File结构体对象,打开时会返回一个文件描述符,就是fd=open("/dev/tty",....)中的fd,这个fd就是内核维护的File对象组的索引。通过fd可以找到File对象,进而由File对象中的struct  file_operations  *f_op指针找到你关于这个文件的驱动,进而在你文件操作时调用对应的驱动,如read(fd,buffer,size,...)则调用file_operations 中的read函数。第一个你说的是对的。
  第二个,你的inode的创建是指定了设备号的,这个设备号是你在注册驱动时获得的,他可以对应上你的驱动,也就是说你的inode里边包含了你的驱动信息,所以打开节点时就获得了驱动信息,并保存到了File结构体对象中,在你操作该文件时(比如read、write)时只用调用标准的接口,把一个文件描述符fd传递为函数参数就可以了。这个过程时linux文件系统规定的标准操作过程。
  第三个,device_register,driver_register时2.6内核提供一种新的驱动编写模型,他引入了bus、device等新的驱动开发架构,可以使繁多的设备有更好的抽象层,进而方便驱动编写,具体可以看看ldd3的相关章节。

|


第2点:Let's suppose that a process executes an open( ) system call on a device file (either of type block or character). Essentially, the corresponding service routine resolves the pathname to the device file and sets up the corresponding inode object, dentry object, and file object.

The inode object is initialized by reading the corresponding inode on disk through a suitable function of the filesystem (usually ext2_read_inode( ) or ext3_read_inode( ). When this function determines that the disk inode is relative to a device file, it invokes init_special_inode( ), which initializes the i_rdev field of the inode object to the major and minor numbers of the device file, and sets the i_fop field of the inode object to the address of either the def_blk_fops or the def_chr_fops file operation table, according to the type of device file. The service routine of the open( ) system call also invokes the dentry_open( ) function, which allocates a new file object and sets its f_op field to the address stored in i_fop,that is, to the address of def_blk_fops or def_chr_fops once again. Thanks to these two tables, every system call issued on a device file will activate a device driver's function rather than a function of the underlying filesystem.

    
 
 

您可能感兴趣的文章:

  • 菜鸟头次用linux,请高手帮忙解决几个问题?
  • 各位高手大家好,我是初学LINUX想请教几个问题
  • 几个问题,请高手回答!
  • 几个问题请教高手,没把握不要乱说哟!
  • 我是初学者,有几个问题,想请教各位高手,望不吝赐教
  • 初学Unix,有几个问题请高手指教,回答完后马上结贴
  • 有几个问题,我是linux新手,刚开始学习,老师的问题太难了,拜托高手提示一下谢谢。
  • 就构建个人互动小网站,问各路高手几个问题:
  • 请教linux下串口编程的几个问题,高手相助!
  • 高分跪请高手指教,无线网卡驱动的几个问题!
  • 几个问题请教高手们了。。。。。。呵呵
  • 几个问题,请高手告之.高分
  • 逻辑地址、物理地址、线性空间、全局段、局部段 问题请教,高手指教了!!!!在线等,高手指教了!!!在线等!!!!!!!!
  • 各位高手:光盘安装Linux9出现问题,请指教!
  • 怎么设置在Linux上面设置WEB服务器?请各位高手指教!!!
  • 高手指教:solaris硬盘分区问题
  • JMF中如何实现多路音频的混合输出?期待高手指教!
  • turbolinux 的安装问题,请高手指教!!!!!!!
  • LINUX 安装进不去图形模式!请高手指教!
  • crontab的问题,希望高手指教!谢谢!
  • 请教高手,如何在VMware下安装suse10.0??请指教,谢谢。
  • kppp拨号上网的问题,请高手指教
  • 386的保护机制为何与这个有点冲突,高手请指教
  • 望高手指教
  • 请高手指教
  • linux ftp 配置 望高手指教,感激不尽
  • linux 下,doxygen生成的html文件中文注释为乱码,请高手指教!
  • cacti监控不到磁盘数据,请高手指教!
  • !!!java 中如何执行FTP命令?请高手指教。100分相赠
  • 高手指教:怎样在LINUX下运行WIN98程序?
  • 那位高手能指教在java里string类如何转化成date型?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高手请教!linux怎样通过pid获取进程信息,如:进程名、进程状态等?
  • 请教--父进程监控子进程,欢迎高手进来探讨!!!
  • 高手指点:不用JNI,如何在Java进程中新起一个JVM并在其中启动另一个Java进程。
  • 关于杀死进程(高手请进)
  • Linux创建进程的问题,请高手帮忙解答一下?
  • 父子进程问题,高手请进!!!
  • linux内核高手进!关于调用__fork()时0号进程的子进程才能与父进程共享PID的困惑
  • 多进程通讯问题,请高手们给点思路吧
  • 请各位高手谈谈是如何管理自己的进程池的?
  • linux进程异步通信,高手请进
  • 哪一位高手能提供关于进程池的完整的概念?30分奉送!!
  • 请教高手:Unix下如何实现进程池?
  • 请问高手LInux 下的进程、线程的切换具体是如何实现的?
  • 求高手指点进程监控问题
  • 关于子进程中释放内存的问题!!?高手请进
  • Linux下多进程实现异步编成,高手帮忙!
  • 高手请进,如何完备的获得进程间父子关系,谢谢!
  • 高手请指点,怎么创建一个不会死的进程
  • 请教高手:C语言怎么知道一个进程是否存在(Linux下)
  • 请各位高手谈谈进程池。
  • 高手,高手,高高手请进!
  • 有熟悉EXIM的高手高手么??
  • to 高手:学java应该怎样一步步学习,从菜鸟到高手.
  • 高分请高手,高手定能解决
  • 请问高手在linux中用什么命令可以做linux的启动盘???在等待高手??
  • 有高手研究Agent++麽?里面有个thread.h,蛮难读的,请高手指点
  • NOSQL iis7站长之家
  • 在dos下用bc31挑战高手******开发mssql程序,连接时报link err:undefined symbol GETNOTE in module DBEXTERN?(挑战高手)
  • 真正的linux高手,请看过来,看你符合高手标准不?
  • 难道这没有高手吗?难道这没有乐于助人的高手?(高分酬谢62+50+50)
  • 关于我对linux高手用yum,非高手用源码的理由


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3