首先,我们来看一下mode_t类型的结构
可以看出,文件的权限位于这个变量的最后9位上。
这是特征位的定义
于是我尝试用这样的语句获取权限特征位:
printf("%o %o %o\n", buff.st_mode&S_IRWXU, buff.st_mode&S_IRWXG, buff.st_mode&S_IRWXO);
但得到的输出是700 60 6
于是我把代码写成了这样
printf("%o\n", (buff.st_mode&S_IRWXU)+(buff.st_mode&S_IRWXG)+(buff.st_mode&S_IRWXO));
就得到了正确的结果:766。
这里需要说明的是,貌似C中+号的运算优先级比&高,所以要使用括号来保证按位与运算先进行。
学校这一学期开了Linux课,课程实验里要求将根目录下所有.txt文件的大小的总和计算出来,但是如果直接用
find / -name '*.txt' | wc -c
的话,算出的是find的查找结果的总字节数,而不是查找到的所有文件的总字节数。
到网上查了一下,发现xargs可以将前一管道的每一个结果作文当前管道的参数,遂将命令改为
find / -name '*.txt' | xargs wc -c
得出的结果中就有所有文件的总字节数。再用grep将总字节数的条目拿出来就好了。