岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Linux频道 >> 系统管理 >> 内核技术 >> Linux频道正文
Linux 2.6.11内核文件IO系统调用详解
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-12-18 17:31:42
mode &= ~current->;fs->;umask; error = vfs_create(dir->;d_inode, dentry, mode, nd); // 创建inode up(&dir->;d_inode->;i_sem); dput(nd->;dentry); nd->;dentry = dentry; if (error) goto exit; acc_mode = 0; flag &= ~O_TRUNC; goto ok; } up(&dir->;d_inode->;i_sem); error = -EEXIST; // 如果指定了O_EXCL和O_CREAT,文件存在时,出错 if (flag & O_EXCL) goto exit_dput; if (d_mountpoint(dentry)) { // 检测文件是否是连接文件 error = -ELOOP; if (flag & O_NOFOLLOW) // 如果指定不遍历连接文件,则返回 goto exit_dput; // 检测dentry挂载点 while (__follow_down(&nd->;mnt,&dentry) && d_mountpoint(dentry)); } error = -ENOENT; if (!dentry->;d_inode) // inode 不存在,则返回 goto exit_dput; if (dentry->;d_inode->;i_op && dentry->;d_inode->;i_op->;follow_link) goto do_link; // 允许遍历连接文件,则手工找到连接文件对应的文件 // 将处理后的dentry复制到nd结构中,并判断其是否是目录,是则返回错误 dput(nd->;dentry); nd->;dentry = dentry; error = -EISDIR; if (dentry->;d_inode && S_ISDIR(dentry->;d_inode->;i_mode)) goto exit; ok: error = may_open(nd, acc_mode, flag); // 打开文件,返回处理结果代码。如3.2.3.1.1描述 if (error) goto exit; return 0; exit_dput: dput(dentry); // 释放dentry exit: path_release(nd); // 释放nd结构 return error; // 返回错误代码 do_link: error = -ELOOP; if (flag & O_NOFOLLOW) goto exit_dput; // 不允许遍历连接文件,则返回错误 // 以下代码是手工找到连接文件对应的文件dentry数据 nd->;flags |= LOOKUP_PARENT; error = security_inode_follow_link(dentry, nd); if (error) goto exit_dput; error = __do_follow_link(dentry, nd); dput(dentry); if (error) return error; nd->;flags &= ~LOOKUP_PARENT; if (nd->;last_type == LAST_BIND) { dentry = nd->;dentry; goto ok; } error = -EISDIR; if (nd->;last_type != LAST_NORM) goto exit; if (nd->;last.name[nd->;last.len]) { putname(nd->;last.name); goto exit; } error = -ELOOP; if (count++==32) { putname(nd->;last.name); goto exit; } dir = nd->;dentry; down(&dir->;d_inode->;i_sem); dentry = __lookup_hash(&nd->;last, nd->;dentry, nd); putname(nd->;last.name); goto do_last; }

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

 

4.2.4.1.1.filp_open子函数may_open

may_open执行权限检测和文件打开,和truncate的操作。

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


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