打印文件信息
#include <myhead.h>
int main(int argc, const char *argv[])
{
//从终端接收文件名
if(argc!=2){
printf("input file error\n");//错误提示信息
printf("usage:./a.out fileName\n");
return -1;
}
//定义文件状态变量
struct stat sb;
//获取文件状态
stat(argv[1],&sb);
//ls -l输出格式示例
//-rw-r--r--(权限) 1(硬连接个数) ubuntu(用户名) ubuntu(主机名) 38(大小) 五月 29 15:43(最后一次修改时间) add.c(文件名)
//第一个-是文件类型 如果是普通文件就是- 目录文件是d 连接文件是l 块设备是b 字符设备是c
//得到文件类型存在字符c里
char c = '-';//存文件类型 默认是普通文件
switch(sb.st_mode&S_IFMT)
{
case S_IFLNK :{
c = 'l';
}break;
case S_IFREG :{}break;
case S_IFBLK :{
c = 'b';
}break;
case S_IFDIR :{
c = 'd';
}break;
case S_IFCHR :{
c = 'c';
}break;
}
//得到权限序列 存进字符串
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+1)%3==1)
quanxian[i] = 'x';
else if((i+1)%3==2)
quanxian[i] = 'w';
else
quanxian[i] = 'r';
}
else //是0赋值为‘-’
quanxian[i] = '-';
//qx右移1位
qx = qx>>1;
}
printf("%c%s",c,quanxian);
return 0;
}