当前位置:网站首页>作业7.29 目录相关函数和文件属性相关函数
作业7.29 目录相关函数和文件属性相关函数
2022-07-30 11:37:00 【不知名大学生M】
文章目录
题目:请使用目录相关函数以及文件属性相关函数实现:显示指定路径下所有文件属性的功能(除了隐藏文件),类似 ls -l 一个目录
函数代码
提取文件权限函数
void mode(mode_t a)
{
char s[3]={
'r','w','x'};
int index=0;
for(int i=8;i>=0;i--)
{
if(a&1<<i)
{
printf("%c",s[(i+1)%3]);
}
else
{
printf("-");
}
}
}
提取文件类型函数
int get_fileType(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("l");break;
case S_IFREG:
printf("-");break;
case S_IFSOCK:
printf("s");break;
default:
printf("?");break;
}
}
获取文件所属用户名函数
int get_usrname(uid_t uid)
{
struct passwd *pwd=getpwuid(uid);
if(NULL==pwd)
{
printf("getpwuid failed\n");
return -1;
}
printf("%s",pwd->pw_name);
return 0;
}
获取文件所属组用户名函数
int get_grpname(gid_t gid)
{
struct group*grp = getgrgid(gid);
if(NULL ==grp)
{
printf( "getgrgid failed\n" );
return -1;
}
printf( "%s" , grp->gr_name);
return 0;
}
提取文件上次修改时间
int timeset(__time_t *t)
{
struct tm *info=NULL;
info=localtime(t);
fprintf(stdout,"%d月 %02d %02d:%02d", \
info->tm_mon+1, info->tm_mday,\
info->tm_hour, info->tm_min);
fflush(stdout);
return 0;
}
主函数代码
int main(int argc, const char *argv[])
{
DIR* dp =opendir(argv[1]);
if(NULL ==dp)
{
perror( "opendir" );
return -1;
}
struct dirent *rp = NULL;
while(1)
{
rp = readdir(dp);
if(NULL ==rp)
{
if(0 == errno)//没有更新错误码,目录被读取到结尾
{
//printf("目录读取完毕\n" );
break;
}
else
{
perror( "readdir" );
return-1;
}
}
if(rp->d_name[0]=='.')
{
continue;
}
struct stat buf;
char str[100];
strcpy(str,argv[1]);
strcat(str,rp->d_name);
if(stat(str,&buf)<0)
{
perror("stat");
return -1;
}
//文件类型以及权限
get_fileType(buf.st_mode);
mode(buf.st_mode);
printf(" ");
//硬链接数
printf("%ld ", buf.st_nlink);
//文件所属用户
get_usrname(buf.st_uid);
printf(" ");
//文件所属组用户
get_grpname(buf.st_gid);
printf(" ");
//文件大小
printf( "%6ld ", buf.st_size);
//文件创建日期
timeset(&buf.st_mtime);
printf(" ");
printf("%s\n",rp->d_name);
}
closedir(dp);
return 0;
}
运行结果
显示指定路径下所有文件属性的功能(除了隐藏文件)


使用ls -l命令查看指定目录的文件属性,验证上述代码正确性

源代码
https://gitee.com/Wei_JiaMin/directory-and-file-properties.git
边栏推荐
猜你喜欢

反转链表-递归反转法

VSCode更改插件的安装位置

LeetCode_236_二叉树的最近公共祖先

Redis 主从复制

概率论得学习整理--番外3:二项式定理和 二项式系数

LinkedList与链表

数据湖(十八):Flink与Iceberg整合SQL API操作

Reverse linked list - iterative inversion method

The battle-hardened programmer was also deceived by a fake programmer from a certain fish. The trust between programmers should be the highest, and he alone destroyed this sense of trust

Verilog grammar basics HDL Bits training 08
随机推荐
TensorFlow自定义训练函数
Digital input and output module DAM-5088
Matlab绘图(1)——二维绘图
如何用Golang来手撸一个Blog - Milu.blog 开发总结
[Database basics] redis usage summary
Native js create table
Vim plugin GrepIt
C#调用explorer.exe打开指定目录
ADC0808/9 signal acquisition developed by single chip microcomputer
基于声信道分析的电缆隧道人员定位技术
IO/多路复用(select/poll/epoll)
Matlab基础(3)——元胞与结构体
概率论的学习整理--番外2:和二项式,组合相关的杨辉三角
TensorFlow custom training function
LCD1602 display experiment developed by single chip microcomputer
Voltage relay HDY - vac - 1 A / 1-220
【数据库基础】redis使用总结
Verilog语法基础HDL Bits训练 08
基于空间特征选择的水下目标检测方法
Verilog grammar basics HDL Bits training 08