岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Linux频道 >> 系统管理 >> 内核技术 >> Linux频道正文
Linux 2.6.11内核文件IO系统调用详解
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-12-18 17:31:42
式如宏定义名称<实际常数值>;: 描述。

O_ACCMODE <0003>;: 读写文件操作时,用于取出flag的低2位。

O_RDONLY<00>;: 只读打开

O_WRONLY<01>;: 只写打开

O_RDWR<02>;: 读写打开

O_CREAT<0100>;: 文件不存在则创建,需要mode_t,not fcntl

O_EXCL<0200>;: 如果同时指定了O_CREAT,而文件已经存在,则出错, not fcntl

O_NOCTTY<0400>;: 如果pathname指终端设备,则不将此设备分配作为此进程的控制终端。not fcntl O_TRUNC<01000>;: 如果此文件存在,而且为只读或只写成功打开,则将其长度截短为0。not fcntl

O_APPEND<02000>;: 每次写时都加到文件的尾端

O_NONBLOCK<04000>;: 如果p a t h n a m e指的是一个F I F O、一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的I / O操作设置非阻塞方式。

O_NDELAY;;

O_SYNC<010000>;: 使每次write都等到物理I/O操作完成。

FASYNC<020000>;: 兼容BSD的fcntl同步操作

O_DIRECT<040000>;: 直接磁盘操作标识

O_LARGEFILE<0100000>;: 大文件标识

O_DIRECTORY<0200000>;: 必须是目录

O_NOFOLLOW<0400000>;: 不获取连接文件

O_NOATIME<01000000>;: 暂无

当新创建一个文件时,需要指定mode 参数,以下说明的格式如宏定义名称<实际常数值>;: 描述。

S_IRWXU<00700>;:文件拥有者有读写执行权限

S_IRUSR (S_IREAD)<00400>;:文件拥有者仅有读权限

S_IWUSR (S_IWRITE)<00200>;:文件拥有者仅有写权限

S_IXUSR (S_IEXEC)<00100>;:文件拥有者仅有执行权限

S_IRWXG<00070>;:组用户有读写执行权限

S_IRGRP<00040>;:组用户仅有读权限

S_IWGRP<00020>;:组用户仅有写权限

S_IXGRP<00010>;:组用户仅有执行权限

S_IRWXO<00007>;:其他用户有读写执行权限

S_IROTH<00004>;:其他用户仅有读权限

S_IWOTH<00002>;:其他用户仅有写权限

S_IXOTH<00001>;:其他用户仅有执行权限

4.2.实现分析

4.2.1.主要函数调用关系图

sys_open( 见4.2.2 节)

   | ----------- getname( 见4.2.3 节 )

   | ----------- filp_open( 见4.2.4节 )

   |                        | ------------ open_namei( 见4.2.4.1节 )

   |                        |                  | ----------- may_open( 见4.2.4.1.1节 )

                           |                        | ------------ dentry_open( 见4.2.4.2节 )

4.2.2.主调用函数sys_open

asmlinkage long sys_open(const char __user * filename, int flags, int mode){

        char * tmp;

        int fd, error;

// 如果不是32位处理器,则增加大文件标识

#if BITS_PER_LONG != 32

        flags |= O_LARGEFILE;

#endif

        // 为了提高使用效率,在使用之前先将文件名拷贝到内核数据区。见3.2.2说明

        tmp = getname(filename);

        // 获取到返回值,如果出错,则返回,否则执行打开操作。

        fd = PTR_ERR(tmp);

        if (!IS_ERR(tmp)) {

                // 从进程的文件表中找出一

上一页  [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 传世私服 传奇世界私服