Chinaunix首页 | 论坛 | 博客
  • 博客访问: 817484
  • 博文数量: 581
  • 博客积分: 7803
  • 博客等级: 少将
  • 技术积分: 3653
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-27 08:21
文章分类

全部博文(581)

文章存档

2013年(7)

2012年(414)

2011年(159)

2009年(1)

分类: LINUX

2011-09-24 09:02:35

long sys_create(const char __user *pathname, int mode)
                                     |            |
                                 +---+            +-----------+
                                 | +------------------------+ |     O_CREAT=00000100=0x40=64
                                 | |O_CREAT|O_WRONLY|O_TRUNC| |     O_RDONLY=0,O_WRONLY=1,O_RDWR=2
                                 | +------------------------+ |     O_TRUNC=00001000=0x200=512
                                 +---+          |          +--+
                                     |          |          |
                                     V          V          V
long sys_open(const char __user *filename, int flags, int mode)
                                     |          |          |
                 +--------+          |          |          +------------+
                 |AT_FDCWD|          |          +------------+          |
                 +--------+          +-----------+           |          |
                      |                          |           |          |
                      V                          V           V          V
long do_sys_open(int dfd, const char __user * filename, int flags, int mode)
                      |                         |             |          |
         +------------+                         V             |          |
         |                      +------------------------+    |          |
         |                      |tmp = getname(filename);|    |          |
         |                      +------------------------+    |          |              +-+
         +---------------------+  |                           |          |              |0|
                               |  +--------------+            |          +---+          +-+
                               |                 |            |              |           |
                               V                 V            V              V           V
struct file *do_filp_open(int dfd, const char *pathname, int open_flag, int mode, int acc_mode)
                                |                |            |
     +--------------------------+                |            V                  sys-open()         for internal routine(open_namei/follow_link...)
     |    +--------------------------------------+                             +---------------+     +--------------------------+
     |    |                      +--------------------------------------+      |00 - read-only |     |00 - no permissions needed|
     |    |                      |flag = open_to_namei_flags(open_flag);|      |01 - write-only|----\|01 - read-permission      |
     |    |                      +--------------------------------------+      |10 - read-write|----/|10 - write-permission     |
     |    |                                                                    |11 - special   |     |11 - read-write           |
     |    |                                                                    +---------------+     +--------------------------+
     |    |
     |    +-------------------------+           +-------------+    +--------------------+
     +-------------+                |           |LOOKUP_PARENT|    |struct nameidata nd;|
                   |                |           +-------------+    +--------------------+
                   |                |                  |                       |
                   V                V                  V                       V
int path_init(int dfd, const char *name, unsigned int flags, struct nameidata *nd)
阅读(1718) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~