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;
}
阅读(863) | 评论(0) | 转发(0) |