linux文件系统之文件的读写

linux文件系统之文件的读写

ID:33582011

大小:243.00 KB

页数:35页

时间:2019-02-27

linux文件系统之文件的读写_第1页
linux文件系统之文件的读写_第2页
linux文件系统之文件的读写_第3页
linux文件系统之文件的读写_第4页
linux文件系统之文件的读写_第5页
资源描述:

《linux文件系统之文件的读写》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux文件系统之文件的读写(续二)------------------------------------------本文系本站原创,欢迎转载!转载请注明出处:http://ericxiao.cublog.cn/------------------------------------------八:VFS层的I/O操作VFS层是与用户界面直接交互的接口,在这一节里,我们将分为读写两部份来介绍VFS层的操作以及跟上层用用的交互.8.1:文件的读操作在用户空间,读文件操作的常用函数为read()。对应在系统

2、空间的调用入口是sys_read().它的代码如下:asmlinkagessize_tsys_read(unsignedintfd,char__user*buf,size_tcount){    structfile*file;    ssize_tret=-EBADF;    intfput_needed;     //根据fd从进程中取出相应的file对象    file=fget_light(fd,&fput_needed);    if(file){        loff_tpos=file_po

3、s_read(file);        //文件的当前位置        ret=vfs_read(file,buf,count,&pos);        //更新当前的文件位置        file_pos_write(file,pos);        fput_light(file,fput_needed);    }     returnret;}从进程中取得文件描述符后和文件当前的操作位置后会调用vfs_read()执行具体的操作过程.它的代码如下:ssize_tvfs_read(struc

4、tfile*file,char__user*buf,size_tcount,loff_t*pos){    structinode*inode=file->f_dentry->d_inode;    ssize_tret;     if(!(file->f_mode&FMODE_READ))        return-EBADF;    if(!file->f_op

5、

6、(!file->f_op->read&&!file->f_op->aio_read))        return-EINVAL;//检查

7、当前区段是否允许读操作    ret=locks_verify_area(FLOCK_VERIFY_READ,inode,file,*pos,count);    if(!ret){        //是否有权限        ret=security_file_permission(file,MAY_READ);        if(!ret){             //如果有read操作,调用之             if(file->f_op->read)                 ret

8、=file->f_op->read(file,buf,count,pos);             else                  //否则调用aio_read                  ret=do_sync_read(file,buf,count,pos);             //ret:写入的字节数             if(ret>0)                  //产生通告                  dnotify_parent(file->f_de

9、ntry,DN_ACCESS);        }    }     returnret;}从上面看到,会最终调用file的相关操作完成文件的读操作.曾记得我们在文件的打开一节中分析了文件的打开过程。在打开文件过程中,文件描述符的相关操作会被赋值为inode->f_op.对于ext2文件系统,inode的相关信息如下:        inode->i_fop=&ext2_file_operations;structfile_operationsext2_file_operations={    .llsee

10、k      =generic_file_llseek,    .read        =generic_file_read,    .write       =generic_file_write,    .aio_read=generic_file_aio_read,    .aio_write   =generic_file_aio_write,    .ioctl       =ext2_ioctl, 

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。