UNIX环境高级编程学习之第六章系统数据文件和信息-修改第四章实现的Shell的“ls -l”功能
2010-01-16 18:39
1306 查看
UNIX环境高级编程学习之第六章系统数据文件和信息-修改第四章实现的Shell的“ls -l”功能, 加入显示文件的用户名和组名
// 只能查看目录中的所有文件属性 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <dirent.h> #include <grp.h> #include <pwd.h> char * gidToGroupName(char *szGroupName, gid_t gid) { struct group* gtr; gtr = getgrgid(gid); strcpy(szGroupName, gtr->gr_name); return szGroupName; } char * uidToUserName(char *szUserName, uid_t uid) { struct passwd *ptr; ptr = getpwuid(uid); strcpy(szUserName, ptr->pw_name); return szUserName; } int main(int argc, char *argv[]) { char szDirPath[512] = { 0 }; char szFilePath[512] = { 0 }; DIR * pDIR; if (argc > 1) { strcpy(szDirPath, argv[1]); // 把命令行第一个参数作为文件夹的路径 }else { strcpy(szDirPath, "."); } pDIR = opendir(szDirPath); if (NULL == pDIR) { printf("Open DIR[%s] Error! /n", szDirPath); return -1; } struct dirent* pdirent; // 文件夹下文件信息结构体 char szName[256]; // 文件名 char szLineData[512]; // 打印到屏幕上的一行数据 struct stat file_stat; // 文件属性信息结构体 while ( (pdirent = readdir(pDIR)) != NULL) // 循环读取文件夹下的一条文件信息 { // 初始化下面用到的字符串 memset(szName, 0, sizeof(szName)); memset(szLineData, 0, sizeof(szLineData)); memset(szFilePath, 0, sizeof(szFilePath)); memset(&file_stat, '/0', sizeof(file_stat)); // 取文件名;文件名加上父文件夹路径组成文件路径 strcpy(szName, pdirent->d_name); sprintf(szFilePath, "%s/%s", szDirPath, szName); // 取文件属性信息 stat(szFilePath, &file_stat); // 取最后修改时间 time_t t = file_stat.st_mtime; // 根据类型给名字后面添加后缀 int len = strlen(szName); if (pdirent->d_type == DT_DIR) // 文件夹 { szName[len] = '//'; }else if (pdirent->d_type == DT_DIR) // 符号连接 { szName[len] = '@'; } // 取文件所属用户名和组名 char szUserName[32]; char szGroupName[32]; memset(szUserName, '/0', sizeof(szUserName)); memset(szGroupName, '/0', sizeof(szGroupName)); uidToUserName(szUserName, file_stat.st_uid); gidToGroupName(szGroupName, file_stat.st_gid); // sprintf(szLineData, "%-32s uid=%-8u gid=%-8u LastDate=%s ", szName, file_stat.st_uid, file_stat.st_gid, ctime(&t)); sprintf(szLineData, "%-32s UName=%-16s GName=%-16s LastDate=%s ", szName, szUserName, szGroupName, ctime(&t)); printf(szLineData); } printf("/n"); closedir(pDIR); return 0; }
相关文章推荐
- UNIX环境高级编程学习之第四章文件和目录-用C实现Shell中的"ls -l"功能
- UNIX环境高级编程学习之第六章系统数据文件和信息-实现uid to name
- UNIX环境高级编程学习之第六章系统数据文件和信息-取所有组名、GID
- UNIX环境高级编程学习之第六章系统数据文件和信息-GID To GroupName
- UNIX环境高级编程学习之第六章系统数据文件和信息 用链表的形式读出一个服务器的远程用户登入登出信息
- UNIX环境高级编程学习之第六章系统数据文件和信息-取所有用户名和UID, GID
- UNIX环境高级编程——第六章—系统数据文件和信息
- UNIX环境高级编程学习笔记(七)系统数据文件和信息
- UNIX环境高级编程之第6章:系统数据文件和信息
- UNIX环境高级编程-第6章- 系统数据文件和信息
- (四) 一起学 Unix 环境高级编程(APUE) 之 系统数据文件和信息
- UNIX环境高级编程之第6章:系统数据文件和信息-习题
- 标准IO库、系统数据文件和信息 - UNIX环境高级编程-第5、6章
- Unix环境高级编程-系统数据文件和信息
- UNIX环境高级编程 第6章 系统数据文件和信息
- <<UNIX环境高级编程>>学习总结——第四章:文件和目录
- UNIX环境高级编程-读书笔记-系统文件信息
- UNIX环境高级编程学习之第十五章进程间通信 - 两个进程通过映射普通文件实现共享内存通信
- UNIX环境高级编程学习之路(四)----系统数据文件和信息
- Unix环境编程-系统文件和信息