#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <my_head.h>
void get_modepre(mode_t m)
{
char per[4]="rwx";
for(int i=0;i<9;i++)
{
if((m &(0400>>i))==0)
{
putchar('-');
continue;
}
putchar(per[i%3]);
}
putchar(' ');
return;
}
void get_getfiletype(mode_t m)
{
switch (m & S_IFMT) {
case S_IFBLK: printf("b"); break;
case S_IFCHR: printf("c"); break;
case S_IFDIR: printf("d"); break;
case S_IFIFO: printf("p"); break;
case S_IFLNK: printf("s"); break;
case S_IFREG: printf("-"); break;
case S_IFSOCK: printf("s"); break;
default: printf("unknown?\n") break;
}
}
int main(int argc, const char *argv[])
{
DIR* dp=opendir("./");
if(NULL==dp)
{
perror("opendir");
return -1;
}
struct dirent* rp=NULL;
int count=0;
while(1){
rp =readdir(dp);
if(NULL==rp)
{
break;
}
if(*(rp->d_name)!='.'){
struct stat buf;
if(stat(rp->d_name,&buf)<0)
{
perror("stat");
return -1;
}
//文件类型及权限
//printf("mode:%o\n",buf.st_mode);
//
//printf("uid:%d\n",buf.st_uid);
struct passwd* pwd = getpwuid(buf.st_uid);
if(NULL== pwd)
{
perror("getpwuid");
return -1;
}
//
//printf("gid:%d\n",buf.st_gid);
struct group* grp= getgrgid(buf.st_gid);
if(NULL==grp)
{
perror("getgrgid");
return -1;
}
//
//printf("time:%ld\n",buf.st_ctime);
struct tm* info=localtime(&buf.st_ctime);
get_getfiletype(buf.st_mode);
get_modepre(buf.st_mode);
printf("%ld",buf.st_nlink);
printf(" %s",pwd->pw_name);
printf(" %s",grp->gr_name);
printf(" %6ld",buf.st_size);
printf(" %d月 %d %02d:%02d ",info->tm_mon+1,info->tm_mday,info->tm_hour,info->tm_min);
printf(" %s\n",rp->d_name);
}
}
return 0;
}
ubuntu@ubuntu:day2$ gcc zuoye.c
ubuntu@ubuntu:day2$ ./a.out
-rwxrwxr-x 1 ubuntu ubuntu 0 9月 7 09:45 open.txt
-rwxrwxr-x 1 ubuntu ubuntu 12984 9月 7 18:44 a.out
-rw-rw-r-- 1 ubuntu ubuntu 437 9月 7 16:29 05_opendir.c
-rw-rw-r-- 1 ubuntu ubuntu 1876 9月 7 18:44 zuoye.c
-rw-rw-r-- 1 ubuntu ubuntu 277 9月 7 09:44 01_open.c
-rw-rw-r-- 1 ubuntu ubuntu 380 9月 7 11:16 03_read.c
-rw-rw-r-- 1 ubuntu ubuntu 1565 9月 7 15:56 04_stat.c
-rw-rw-r-- 1 ubuntu ubuntu 63892 9月 7 11:35 1.jpeg
-rwxrwxr-- 1 ubuntu ubuntu 23 9月 7 10:49 write.txt
-rw-rw-r-- 1 ubuntu ubuntu 322 9月 7 10:47 02_write.c
ubuntu@ubuntu:day2$ ls -l
总用量 108
-rw-rw-r-- 1 ubuntu ubuntu 277 九月 7 09:44 01_open.c
-rw-rw-r-- 1 ubuntu ubuntu 322 九月 7 10:47 02_write.c
-rw-rw-r-- 1 ubuntu ubuntu 380 九月 7 11:16 03_read.c
-rw-rw-r-- 1 ubuntu ubuntu 1565 九月 7 15:56 04_stat.c
-rw-rw-r-- 1 ubuntu ubuntu 437 九月 7 16:29 05_opendir.c
-rw-rw-r-- 1 ubuntu ubuntu 63892 九月 7 11:20 1.jpeg
-rwxrwxr-x 1 ubuntu ubuntu 12984 九月 7 18:44 a.out
-rwxrwxr-x 1 ubuntu ubuntu 0 九月 7 09:45 open.txt
-rwxrwxr-- 1 ubuntu ubuntu 23 九月 7 10:49 write.txt
-rw-rw-r-- 1 ubuntu ubuntu 1876 九月 7 18:44 zuoye.c