作业:输出文件属性
#include<myhead.h>
#include<dirent.h>
int main(int argc, const char *argv[])
{
//定义一个目录文件指针
DIR *dp;
//判断目录是否打开成功
if((dp=opendir("./"))==NULL)
{
perror("open dir");
return -1;
}
//定义dirent结构体指针
struct dirent *tp;
//读取目录
while((tp=readdir(dp))!=NULL)
{
struct stat sb;
char s[20]="./";
strcat(s,tp->d_name);
//获取目录文件
stat(s,&sb);
//printf("%-8s\t%#o\t%d\t%ld\t\n",tp->d_name,tp->d_type,tp->d_reclen,tp->d_ino);
char quanxian[10]={'\0'};//存权限数列的字符串
unsigned long qx = sb.st_mode&0777;//无符号long型变量存权限
for(int i = 0;i<9;i++){//权限序列长度为9循环9次
if(qx & 0001){//取出最后一位 是1进入if
if(i%3==1)
quanxian[i] = 'x';
else if(i%3==2)
quanxian[i] = 'w';
else
quanxian[i] = 'r';
}
else //是0赋值为‘-’
quanxian[i] = '-';
//qx右移1位
qx=qx>>1;
}
//输出文件权限
printf("%s",quanxian);
//输出文件类型,大小,文件名
printf(" %#-5o\t\t%ld\t%ld\t%s\n",sb.st_mode&S_IFMT, /* sb.st_mode&0777*/ sb.st_size, sb.st_ino,tp->d_name);
}
//关闭目录
closedir(dp);
return 0;
}
输出结果