#include<myhead.h>
void getfilePermission(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]);
/*if (i%3 == 0)
printf("x");
else if(i%3 == 1)
printf("w");
else if(i%3 == 2)
printf("r");*/
}
}
void get_filetype(mode_t m)
{
switch(m & S_IFMT)
{
case S_IFBLK: printf("block device\n"); break;
case S_IFCHR: printf("character device\n"); break;
case S_IFDIR: printf("directory\n"); break;
case S_IFIFO: printf("FIFO/pipe\n"); break;
case S_IFLNK: printf("symlink\n"); break;
case S_IFREG: printf("regular file\n"); break;
case S_IFSOCK: printf("socket\n"); break;
default: printf("unknown?\n"); break;
}
return;
}
int main(int argc, const char *argv[])
{
DIR* dp = opendir("./");
if (NULL == dp)
{
perror("opendir");
return -1;
}
printf("目录打开成功");
struct dirent *rp = NULL;
while(1)
{
rp = readdir(dp);
if (NULL == rp)
{
break;
}
struct stat buf;
if (stat(rp->d_name, &buf) < 0)
{
perror("stat");
return -1;
}
//文件的类型及权限
// printf("mode: %o\n", buf.st_mode);
putchar('-');
getfilePermission(buf.st_mode);
// get_filetype(buf.st_mode);
//文件的硬链接数
printf(" %ld\t", buf.st_nlink);
//文件所属用户的id号
// printf("uid: %d\n", buf.st_uid);
struct passwd* pwd = getpwuid(buf.st_uid);
if (NULL == pwd)
{
perror("getpwuid");
return -1;
}
printf("%s\t", pwd->pw_name);
// printf("gid: %d\n", buf.st_gid);
struct group* grp = getgrgid(buf.st_gid);
if (NULL == grp)
{
perror("getgrgid");
return -1;
}
printf("%s\t", grp->gr_name);
//文件的大小
printf("%ld\t ", buf.st_size);
//时间
//printf("time: %ld\n", buf.st_ctime);
time_t t1 = time(NULL);
//printf("%ld\n", t1);
time_t t2;
struct tm* info = NULL;
time(&t2);
info = localtime(&t2);
printf("%d-%02d-%02d %02d:%02d:%02d\t ",\
info->tm_year+1900, info->tm_mon+1,\
info->tm_mday, info->tm_hour, \
info->tm_min, info->tm_sec);
printf("%s\n", rp->d_name);
}
return 0;
}
9.7作业
最新推荐文章于 2025-04-25 22:22:07 发布