岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Linux频道 >> 系统管理 >> 内核技术 >> Linux频道正文
Linux 2.6.11内核文件IO系统调用详解
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-12-18 17:31:42
entry->;d_inode; if (f->;f_mode & FMODE_WRITE) { error = get_write_access(inode); // 获取一次inode写操作权限 if (error) goto cleanup_file; } // 初始化文件结构 f->;f_mapping = inode->;i_mapping; f->;f_dentry = dentry; f->;f_vfsmnt = mnt; f->;f_pos = 0; f->;f_op = fops_get(inode->;i_fop); file_move(f, &inode->;i_sb->;s_files); // 调用文件驱动模块初始化物理磁盘 if (f->;f_op && f->;f_op->;open) { error = f->;f_op->;open(inode,f); if (error) goto cleanup_all; } f->;f_flags &= ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC); // 初始化上次读取状态 file_ra_state_init(&f->;f_ra, f->;f_mapping->;host->;i_mapping); // 如果设置了O_DIRECT,则检测文件结构中是否有驱动的操作函数指针 if (f->;f_flags & O_DIRECT) { if (!f->;f_mapping->;a_ops || !f->;f_mapping->;a_ops->;direct_IO) { fput(f); f = ERR_PTR(-EINVAL); } } return f; // 返回文件结构 cleanup_all: // 出错,则释放资源并返回 fops_put(f->;f_op); if (f->;f_mode & FMODE_WRITE) put_write_access(inode); file_kill(f); f->;f_dentry = NULL; f->;f_vfsmnt = NULL; cleanup_file: put_filp(f); cleanup_dentry: dput(dentry); mntput(mnt); return ERR_PTR(error); }

上一页  [1] [2] [3] [4] [5] [6] [7] 下一页  

 

4.3. 总结

open函数的主要操作就是为文件初始化inode,初始化文件结构,刷新进程文件链表。

5.creat 函数

asmlinkage long sys_creat(const char __user * pathname, int mode){

return sys_open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode);

}

从上面的简短的实现代码可以看出,creat的系统调用直接以O_CREAT|O_WRONLY|O_TRUNC标识调用open函数实现的。

6.read 函数

6.1.原型与参数

ssize_t read(unsigned int fd, char * buf, size_t count)

read函数是从打开的文件中读取数据。如read成功,则返回读到的字节数。如已到达文件的尾端,则返回0。如果失败,则返回-1。有多种情况可使实际读到的字节数少于要求读字节数:

• 读普通文件时,在读到要求字节数之前已到达了文件尾端。例如,若在到达文件尾端之前还有30个字节,而要求读100个字节,则read返回30,下一次再调用read时,它将返回0 (文件尾端)。

• 当从终端设备读时,通常一次最多读一行(第11章将介绍如何改变这一点)。

• 当从网络读时,网络中的缓冲机构可能造成返回值小于所要求读的字节数。

• 某些面向记录的设备,例如磁带,一次最多返回一个记录。

读操作从文件的当前位移量处开始,在成功返回之前,该位移量增加实际读得的字节数。

6.2.实现分析

6.2.1.主要函数调用关系图

sys_read (参见6.2.2 )

                        | ------------- vfs_read (参见6.2.3)

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页


  • 上一个Linux频道:
  • 下一个Linux频道:
  •  
    热门文章
    推荐文章
    关于我们 | 发展历程 | 网站地图 | 广告服务 | 招贤纳士 | 战略合作 | 友情链接 | 著作声明 | 联系我们
    Copyright © 2002-2007 SYUE All rights reserved.
    E_mail:Admin@Syue.Com 皖ICP备05004589号
    未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
    bet365 传世私服 天龙八部私服 热血江湖私服 英雄合击传奇私服 机战私服 惊天动地私服 天龙八部私服 热血江湖私服 bet365 天龙八部私服 bet365 传世私服 传奇世界私服