LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 805|回复: 4

帮忙给我讲讲这个程序

[复制链接]
发表于 2004-2-15 17:06:21 | 显示全部楼层 |阅读模式
列出文件访问权限的函数

char *get_perms(struct stat *sbuf ,char* perms)
{static char*modes[]={
"---","-- x","-w-","-wx","r- -","r-x","rw-","rwx"}
int i,j;
*perms='\0';


for(i=2;i>0;i--)
{j=(sbuf->st_mode>>(i*3))&7;
strcat(perms,modes[j]);
}

if((sbuf->stmode&S_ISUID)!=0)
perms[2]='s';

if((sbuf->stmode&S_ISGID)!=0)
perms[5]='s';

if((sbuf->stmode&S_ISUID)!=0)
perms[8]='t';
}
请给我解释一下这个程序
特别是for循环我没看懂
谢谢
发表于 2004-2-15 18:11:35 | 显示全部楼层
我的理解是:
i*3是每次要右移的位数,第一次是6位,这样就取出最左边的3个权限为,让这个权限位和7「0x0111」去进行“与”操作,这样就过滤sid/gid位了。然后将这些单纯的权限位『转化为整数』存放到j变量,这样就可以定位当前权限对应的modes数组的字符串了。

希望你能懂我说的,呵呵,我也说不很清楚。
 楼主| 发表于 2004-2-16 10:31:56 | 显示全部楼层
还是有点不太明白
权限位的排列顺序是怎样的
我真是一点都不懂
大家一定要诲人不倦阿
发表于 2004-2-16 16:54:46 | 显示全部楼层
一点不懂没关系,但不能自己不努力。上网搜索一下就能找到答案了。
http://www.fanqiang.com/a1/b1/20010421/172434.html
 楼主| 发表于 2004-2-17 19:48:54 | 显示全部楼层
谢斑竹教诲
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表