实现stat命令
2017-07-31 21:47
106 查看
#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <time.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <pwd.h> #include <grp.h> int main(int argc,char* argv[]) { if(argc<2) { printf("./mystat filename\n"); exit(1); } // 文件信息结构体 struct stat st; int ret = stat(argv[1],&st); if(ret == -1) { perror("stat"); exit(1); } //存储文件类型和访问权限 char perms[11] = { 0 }; //判断文件类型 switch(st.st_mode & S_IFMT) { case S_IFLNK: perms[0] = 'l'; break; case S_IFDIR: perms[0] = 'd'; break; case S_IFREG: perms[0] = '-'; break; case S_IFBLK: perms[0] = 'b'; break; case S_IFSOCK: perms[0] = 's'; break; case S_IFIFO: perms[0] = 'f'; break; default: perms[0] = '?'; break; } //判断文件的访问属性 //文件所有者 perms[1] = (st.st_mode & S_IRUSR) ? 'r':'-'; perms[2] = (st.st_mode & S_IWUSR) ? 'w':'-'; perms[3] = (st.st_mode & S_IXUSR) ? 'x':'-'; //判断所有组 perms[4] = (st.st_mode & S_IRGRP) ? 'r':'-'; perms[5] = (st.st_mode & S_IWGRP) ? 'w':'-'; perms[6] = (st.st_mode & S_IXGRP) ? 'x':'-'; //判断其他人 perms[7] = (st.st_mode & S_IROTH) ? 'r':'-'; perms[8] = (st.st_mode & S_IWOTH) ? 'w':'-'; perms[9] = (st.st_mode & S_IXOTH) ? 'x':'-'; //硬链接计数 int linkNum = st.st_nlink; //文件所有者 char* fileUser = getpwuid(st.st_uid)->pw_name; //文件所属组 char* fileGrp = getgrgid(st.st_gid)->gr_name; //文件大小 int fileSize = st.st_size; //修改时间 char* time = ctime(&st.st_mtime); char mtime[512] = {0}; strncpy(mtime,time,strlen(time)-1); char buf[1024]; sprintf(buf,"%s %d %s %s %d %s %s %s",perms,linkNum,fileUser,fileGrp,fileSize,mtime,argv[1]); printf("%s\n",buf); return 0; }
相关文章推荐
- 一维码Code 39简介及其解码实现(zxing-cpp)
- iOS实现先无动画pop再push,替换当前控制器
- 详解AsyncTask实现原理
- silverlight实现图片局部放大效果的方法
- C++ 利用指针和结构体实现一个函数返回多个值
- 如何实现内存分配器?
- 设计模式C++实现(1)——工厂模式
- SpringIOC容器的实现(简述)
- java实现bit-map处理大数据
- 安卓自定义控件-实现IOS版UC浏览器三点加载动画效果
- php实现工厂模式
- poj3125(优先队列数组实现)
- (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
- 借助常见工具快捷实现录音文件的查找与导出
- Java 中缓存机制的实现
- C++实现遍历链表一次求出中间的节点
- atoi函数和itoa函数的简单实现
- checkbox 全选/全不选 三目运算符实现的
- 第9周、项目2(2)—对称矩阵的压缩存储的实现与运用
- Java实现图片上传