当前位置: 技术问答>linux和unix
期末作业,实现ls命令
来源: 互联网 发布时间:2016-12-08
本文导语: 问下大体思路,谢谢! | #include #include #include #include #include #include #include #include #include #include // 转换时间显示格式 char * ptime(time_t tv) { static char t[64]; struct tm tmv; s...
问下大体思路,谢谢!
|
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
// 转换时间显示格式
char * ptime(time_t tv)
{
static char t[64];
struct tm tmv;
strftime(t, 20, "%Y/%m/%d %T", localtime(&tv));
return t;
}
int main(int argc, char *argv[])
{
char szMode[16]; // 权限信息
char szUser[64]; // 用户名称
char szGrp[64]; // 组名称
char szTime[64]; // 文件时间
DIR *dp;
struct dirent *dirp;
struct stat st;
struct passwd *pw;
struct group *pg;
if( argc != 2 )
{
printf("usage: %s n", argv[0]);
exit(0);
}
/* 打开目录 */
if( (dp = opendir(argv[1])) == NULL )
{
perror(argv[1]);
exit(1);
}
if( chdir(argv[1]) d_name, &st) pw_name);
// 获取组名称
if( (pg = getgrgid(st.st_gid)) == NULL )
sprintf(szGrp, "%d", st.st_gid);
else
strcpy(szGrp, pg->gr_name);
strcpy(szTime, ptime(st.st_mtime));
printf("%s %4d %16s %16s %16ld %s %sn", szMode, st.st_nlink, szUser, szGrp, (long)(st.st_size), szTime, dirp->d_name);
}
/* 关闭目录 */
closedir(dp);
exit(0);
}
|
http://blog.csdn.net/subfate/archive/2011/01/06/6120505.aspx
抄人家的,自己作了点修改。
抄人家的,自己作了点修改。
|
opendir打開目錄,然後readdir讀目錄,dirent結構體中的d_name就是文件名。
如果樓主想顯示詳細信息(類似于ls -l),可以用stat讀出文件詳細信息。
如果再要顯示文件的用戶和組,可能用到getpwuid和getgrgid。
如果樓主想顯示詳細信息(類似于ls -l),可以用stat讀出文件詳細信息。
如果再要顯示文件的用戶和組,可能用到getpwuid和getgrgid。
|
strace ls
看一下调用过程,分析一下用到了哪些函数,是怎么写的
看一下调用过程,分析一下用到了哪些函数,是怎么写的