0
点赞
收藏
分享

微信扫一扫

linux下实现ls -al的效果

产品喵dandan米娜 2022-03-11 阅读 78
#include <func.h>

int main(int argc,char*argv[])
{
ARGS_CHECK(argc,2);//参数检错
DIR *dp=opendir(argv[1]);
ERROR_CHECK(dp,NULL,"opendir");
if(strcmp(argv[1],".")!=0){
chdir(argv[1]);
}

struct stat pstat;
struct dirent *pdirent;
struct tm*ptm;

while((pdirent=readdir(dp))!=NULL){
char type[11]={0};//记录文件类型和权限
//先记录类型
switch(pdirent->d_type){
case DT_BLK:type[0]='b';
break;
case DT_CHR:type[0]='c';
break;
case DT_REG:type[0]='-';
break;
case DT_DIR:type[0]='d';
break;
case DT_LNK:type[0]='l';
}

int ret =stat(pdirent->d_name,
ERROR_CHECK(ret,-1,"stat");

//记录权限
int mode=pstat.st_mode;
int k=9;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if((mode&1)&&(k>0)){
switch(j){
case 0:type[k--]='x';
break;
case 1:type[k--]='w';
break;
case 2:type[k--]='r';
break;
}
}
else{
type[k--]='-';
}
mode>>=1;
}
}

//记录时间
ptm=gmtime(&pstat.st_mtime);

printf("%s %ld %s %s %5ld %d月 %3d %2d:%2d %s\n",type,pstat.st_nlink,
getpwuid(pstat.st_uid)->pw_name,getgrgid(pstat.st_gid)->gr_name,
pstat.st_size,ptm->tm_mon+1,ptm->tm_mday,(8+ptm->tm_hour)%24,ptm->tm_min,
pdirent->d_name);
}
return 0;
}

举报

相关推荐

0 条评论