在Linux系统下用C语言实现系统ls -l目录显示功能

 命令框中ls -l 可以显示文件详细信息

怎么样用C语言实现该功能?????

源码如下:

#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>
#include <string.h>
char fun1(mode_t a);
void fun2(mode_t a);
void fun3(struct timespec a);
int main()
{
	char mulu[30]={0};
	printf("输入要查看的目录\n");
	gets(mulu);
	DIR* p=opendir(mulu);
	if(p==NULL)
	{
		printf("err2\n");
		perror("opendir\n");
	}
	struct dirent*dir=NULL;
	while(dir=readdir(p))
	{
		struct stat info={0};
		char buf[30]={0};
		sprintf(buf,"%s/%s",mulu,dir->d_name);//字符串的拼接
		int flag=stat(buf,&info);
		if(flag==-1)
		{
			printf("err1");
			perror("stst");
			return 0;
		}
		printf("%c ",fun1(info.st_mode));//文件类型
		fun2(info.st_mode);//权限
		printf("%ld\t",info.st_nlink);//连接数
		printf("%ld\t",info.st_size);//大小
		fun3(info.st_mtim);//时间(月日时)
		printf("%s\n",dir->d_name);//文件名
	}
	closedir(p);
	return 0;
}

char fun1(mode_t a)
{
	switch(a&S_IFMT)
	{
	case S_IFBLK: return 'b'; break;
	case S_IFCHR: return 'c'; break;
	case S_IFDIR: return 'd'; break;
	case S_IFIFO: return 'p'; break;
	case S_IFLNK: return 'l'; break;
	case S_IFREG: return '-'; break;
	case S_IFSOCK:return 's'; break;
	default:'?'; break;
	}
}
void fun2(mode_t a)
{
	char temp[10]={"---------"};
	if(a&S_IRUSR)
	temp[0]='r';
	if(a&S_IWUSR)
	temp[1]='w';
	if(a&S_IXUSR)
	temp[2]='x';
	
	if(a&S_IRGRP)
	temp[3]='r';
	if(a&S_IWGRP)
	temp[4]='w';
	if(a&S_IXGRP)
	temp[5]='x';
	
	if(a&S_IROTH)
	temp[6]='r';
	if(a&S_IWOTH)
	temp[7]='w';
	if(a&S_IXOTH)
	temp[8]='x';
	
	printf("%s ",temp);
}
void fun3(struct timespec a)
{
	struct tm* tm=localtime(&a);
	printf("%d月 %d %d:%d ",tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min);
}

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值