linux案例 模拟 ls -l
ls -l //当前目录下文件的信息
文件权限 硬链接数 所有者 所在组 大小 最后修改时间 文件名称
ls -l 文件名称 //具体文件的信息
1 #include <stdio.h> 2 #include <sys/types.h> //stat 3 #include <sys/stat.h> //stat 4 #include <unistd.h> //stat 5 #include <pwd.h> //getpwuid 6 #include <grp.h> //getgrgid 7 #include <time.h> //ctime 8 #include <string.h> //strlen strncpy 9 10 // 模拟实现ls -l 11 //文件权限 硬链接数 所有者 所在组 大小 最后修改时间 文件名称 12 int main(int argc, char* argv[])//文件名称, 可执行程序名称或路径 13 { 14 //判断输入的参数是否正确 15 if(argc < 2) 16 { 17 printf("%s filename\n",argv[0]); 18 return -1; 19 } 20 //通过stat函数获取用户传入的文件的信息 21 struct stat st; 22 int ret = stat(argv[1],&st); 23 if(ret == -1) 24 { 25 perror("stat"); 26 return -1; 27 } 28 //获取文件类型和文件权限 29 char perms[11] = {0};//10 + 空字符 用于保存文件类型和文件权限的字符串 30 switch(st.st_mode & __S_IFMT) 31 { 32 case __S_IFLNK: 33 perms[0] = 'l'; 34 break; 35 case __S_IFDIR: 36 perms[0] = 'd'; 37 break; 38 case __S_IFREG: 39 perms[0] = '-'; 40 break; 41 case __S_IFBLK: 42 perms[0] = 'b'; 43 break; 44 case __S_IFCHR: 45 perms[0] = 'c'; 46 break; 47 case __S_IFSOCK: 48 perms[0] = 's'; 49 break; 50 case __S_IFIFO: 51 perms[0] = 'p'; 52 break; 53 default: 54 perms[0] = '?'; 55 break; 56 } 57 //判断文件的访问权限 58 //文件所有者 59 perms[1] = (st.st_mode & S_IRUSR) ? 'r':'-'; 60 perms[2] = (st.st_mode & S_IWUSR) ? 'w':'-'; 61 perms[3] = (st.st_mode & S_IXUSR) ? 'x':'-'; 62 //文件所在组的权限 63 perms[4] = (st.st_mode & S_IRGRP) ? 'r':'-'; 64 perms[5] = (st.st_mode & S_IWGRP) ? 'w':'-'; 65 perms[6] = (st.st_mode & S_IXGRP) ? 'x':'-'; 66 //其他人权限 67 perms[7] = (st.st_mode & S_IROTH) ? 'r':'-'; 68 perms[8] = (st.st_mode & S_IWOTH) ? 'w':'-'; 69 perms[9] = (st.st_mode & S_IXOTH) ? 'x':'-'; 70 //获取硬链接数 71 int linkNum = st.st_nlink; 72 //文件所有者 73 char* fileUser = getpwuid(st.st_uid)->pw_name;//st_uid:文件所有者id号, 返回结构体中pw_name为用户名 74 //文件所在组 75 char* fileGrp = getgrgid(st.st_gid)->gr_name; 76 //文件大小 77 long int fileSize = st.st_size; 78 //获取修改时间 79 char* time = ctime(&st.st_mtime); 80 char mtime[512] = {0}; 81 strncpy(mtime, time, strlen(time) - 1);//ctime默认有个换行 消除换行 复制 - 1 82 //输出 83 char buf[1024]; 84 sprintf(buf,"%s %d %s %s %ld %s %s",perms,linkNum,fileUser,fileGrp,fileSize,mtime,argv[1]); 85 printf("%s\n",buf); 86 return 0; 87 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)