myls相关函数
来源:互联网 发布:网络五大鬼畜歌曲 编辑:程序博客网 时间:2024/06/09 18:49
//根据用户id获取用户名
getpwuid()
#include <pwd.h>
struct passwd *getpwuid(uid_t uid);
//根据组id获取组名
getgrgid()
#include <grp.h>
struct group *getgrgid(gid_t gid);
//转化时间格式
localtime()
#include <time.h>
struct tm *localtime(const time_t *timep);
//读取软链接的名字
readlink()
ssize_t readlink(const char *path, char *buf, size_t bufsiz);
举例子:
void fun(const char *path,const char *filename);
int main(int argc, char *argv[])
{
char w[128]={0};
//判断命令行参数
if(argc<2)
{
//当前目录
strcpy(w,"./");
}
else
{
//通过参数传入的指定目录
strcpy(w,argv[1]);
}
printf("%s\n",argv[1]);
printf("%s\n",w);
struct stat buf;
int ret=0;
//判断w数组中目录的属性
ret=lstat(w,&buf);
if(ret<0)
{
perror("lstat");
exit(0);
}
if(S_ISDIR(buf.st_mode))//目录
{
DIR *dirp=NULL;
dirp=opendir(w);
struct dirent *dsp;
char path[128]={0};
while((dsp=readdir(dirp))!=NULL)
{
//.说明是隐藏文件
if(dsp->d_name[0]=='.')
{
continue;
}
else
{
memset(path,0,sizeof(path));
strcpy(path,w);
strcat(path,dsp->d_name);
//文件路径和文件名
fun(path,dsp->d_name);
}
}
}
else//不是目录,是普通文件
{
//此时w中保存的是文件名
fun(w,w);
}
return 0;
}
void fun(const char *path,const char *filename)
{
struct stat buf;
int ret=0;
ret=lstat(path,&buf);
if(ret<0)
{
perror("lstat");
exit(0);
}
//打印文件的类别
switch(buf.st_mode & S_IFMT)
{
case S_IFREG:
printf("-");
break;
case S_IFDIR:
printf("d");
break;
case S_IFCHR:
printf("c");
break;
case S_IFBLK:
printf("b");
break;
case S_IFIFO:
printf("p");
break;
case S_IFSOCK:
printf("s");
break;
case S_IFLNK:
printf("l");
break;
}
//打印文件的权限
int n=0;
for(n=8;n>=0;n--)
{
if(buf.st_mode & (1<<n))
{
switch(n%3)
{
case 0:
printf("x");
break;
case 1:
printf("w");
break;
case 2:
printf("r");
break;
}
}
else
{
printf("-");
}
}
//打印硬链接数
printf(" %d",buf.st_nlink);
//打印用户名
struct passwd *pw;
pw=getpwuid(buf.st_uid);
printf(" %s",pw->pw_name);
//打印用户组名字
struct group *gr;
gr=getgrgid(buf.st_gid);
printf(" %s",gr->gr_name);
//打印文件的大小
printf(" %ld",buf.st_size);
//打印文件最后访问的时间
struct tm *tm;
tm=localtime(&buf.st_atime);
printf(" %d-%d-%d %d:%d",tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min);
//打印文件名
char out[128]={0};
if(S_ISLNK(buf.st_mode))
{
printf(" %s",filename);
printf("->");
readlink(filename,out,sizeof(out));
printf("%s\n",out);
}
else
{
printf(" %s\n",filename);
}
}
- myls相关函数
- myls.c
- (myls)模拟" ls "命令
- linux 下myls实现
- 函数相关
- 函数相关
- 相关函数
- myls-l.c 实现ls -l指令
- UC高级编程--实现myls程序
- APUE中的第一个程序-myls如何才能运行
- 第一个程序 myls 查找目录下文件
- UNIX环境高级编程第一个例子myls.c
- APUE学习1:迈出第一步,编译myls.c
- 日期相关的函数
- 文本操作相关函数
- Variant的相关函数
- ShellExecute函数相关用法
- 工作路径相关函数
- LeetCode 15. 3Sum
- 反射实例
- java HashMap和HashTable的区别
- citrix receiver runtime error
- Poj 2774 二分+字符串hash
- myls相关函数
- Snapshotting a view that has not been rendered results in an empty snapshot.
- 一个老鸟发的公司内部整理的 Android 学习路线图 Markdown 版本
- Java 流(Stream)
- 解决VS2008读execl出现:服务器出现意外情况 问题
- 排序算法(十一) 基数排序
- 统计字符出现的次数。2016-10-27
- C++中多线程编程之volatile分析
- Android Volley完全解析(四),带你从源码的角度理解Volley