Chinaunix首页 | 论坛 | 博客
  • 博客访问: 25604
  • 博文数量: 9
  • 博客积分: 148
  • 博客等级: 入伍新兵
  • 技术积分: 110
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-06 00:17
个人简介

xxx

文章分类

全部博文(9)

文章存档

2016年(1)

2015年(2)

2014年(1)

2012年(2)

2011年(2)

2010年(1)

分类:

2011-03-01 08:41:05

APUE在文件和目录章节以及进程控制有说明,man 2 stat或者man 2 chmod都可以查到相关信息
文件的信息一般存在i节点的节点信息中,然后通过stat()系统函数从文件对应的i节点号里面的结算信息进行读取。
mode_t:一般在头文件sys/stat.h说明
int mode2str(char *bit_mode, size_t len, mode_t st_mode)
{
    if (bit_mode == NULL || len < 10) return -1;
    memset(bit_mode, '-', len);
 
    /* Check File Type */
    if(S_ISDIR(st_mode)) bit_mode[0]='d'; /* Directory */
    else if(S_ISCHR(st_mode)) bit_mode[0]='c'; /* Char or Device */
    else if(S_ISBLK(st_mode)) bit_mode[0]='b'; /* Block */
    else if(S_ISREG(st_mode)) bit_mode[0]='-'; /* default '-' */
    else if(S_ISLNK(st_mode)) bit_mode[0]='l'; /* Link */
    else if(S_ISFIFO(st_mode)) bit_mode[0]='p'; /* PIPO */
    else if(S_ISSOCK(st_mode)) bit_mode[0]='s'; /* Socket */
   
    if(st_mode & S_IRUSR) bit_mode[1]='r';
    if(st_mode & S_IWUSR) bit_mode[2]='w';
    if(st_mode & S_IXUSR) bit_mode[3]='x';
    if(st_mode & S_IRGRP) bit_mode[4]='r'; /* S_ISUID: set 'S'; chmod +s */
    if(st_mode & S_IWGRP) bit_mode[5]='w';
    if(st_mode & S_IXGRP) bit_mode[6]='x';
    if(st_mode & S_IROTH) bit_mode[7]='r';
    if(st_mode & S_IWOTH) bit_mode[8]='w';
    if(st_mode & S_IXOTH) bit_mode[9]='x';
    return 0;
}
阅读(836) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~