Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4240372
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: LINUX

2011-12-14 12:14:42

在 http://blog.csdn.net/iczyh/article/details/3206249 文章中有 mode_t类型的数据,对此不是很了解,在此记录下:

创建一个 proc 文件
根据对 proc 文件的不同使用,内核提供了多种包装函数来创建一个 proc 文件。

方法一:
struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode, struct proc_dir_entry *parent)
这是最直接,包装最少的创建方法。
参数 name 是要创建的 proc 文件名。mode 是该文件权限值,例如 S_IRUGO,可传入0表示采用系统默认值。parent 指定该文件的上层 proc 目录项,如果为 NULL,表示创建在 /proc 根目录下。
create_proc_entry() 完成的任务主要包括:检测 mode 值,分配 proc_dir_entry 结构,注册 proc_dir_entry。

mode_t 是文件权限值。定义在 中。
  1. #define S_IFMT 00170000
  2.   13#define S_IFSOCK 0140000
  3.   14#define S_IFLNK 0120000
  4.   15#define S_IFREG 0100000
  5.   16#define S_IFBLK 0060000
  6.   17#define S_IFDIR 0040000
  7.   18#define S_IFCHR 0020000
  8.   19#define S_IFIFO 0010000
  9.   20#define S_ISUID 0004000
  10.   21#define S_ISGID 0002000
  11.   22#define S_ISVTX 0001000
  12.   23
  13.   24#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
  14.   25#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
  15.   26#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
  16.   27#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
  17.   28#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
  18.   29#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
  19.   30#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
  20.   31
  21.   32#define S_IRWXU 00700
  22.   33#define S_IRUSR 00400
  23.   34#define S_IWUSR 00200
  24.   35#define S_IXUSR 00100
  25.   36
  26.   37#define S_IRWXG 00070
  27.   38#define S_IRGRP 00040
  28.   39#define S_IWGRP 00020
  29.   40#define S_IXGRP 00010
  30.   41
  31.   42#define S_IRWXO 00007
  32.   43#define S_IROTH 00004
  33.   44#define S_IWOTH 00002
  34.   45#define S_IXOTH 00001
  35.   46
  36.   47#endif
  37.   48
  38.   49#ifdef __KERNEL__
  39.   50#define S_IRWXUGO (S_IRWXU|S_IRWXG|S_IRWXO)
  40.   51#define S_IALLUGO (S_ISUID|S_ISGID|S_ISVTX|S_IRWXUGO)
  41.   52#define S_IRUGO (S_IRUSR|S_IRGRP|S_IROTH)
  42.   53#define S_IWUGO (S_IWUSR|S_IWGRP|S_IWOTH)
  43.   54#define S_IXUGO (S_IXUSR|S_IXGRP|S_IXOTH)
这里的 S_IRUGO=(S_IRUSR|S_IRGRP|S_IROTH)
S_IRUSR:用户读  00400
S_IRGRP:用户组读 00040
S_IROTH: 其他读 00004






阅读(16794) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~