IO学习day3(文件IO、文件属性、目录IO)

 1.思维导图

 2.作业

将指定目录下所有文件的属性显示出来,类似 ls -l 一个指定目录

打开目录,

读取目录中的文件名

将路径和文件名拼接

传入给stat获取文件属性

#include
//文件的类型及其权限
void get_filepermission(mode_t m)
{/*
	int i=0;
	int q=0400;//char str[4]="rwx";
	for(i=0;i<9;i++)//循环右移1位
	{
		if((m&q)==0)//无权限
		{
			putchar('-');        //代码优化putchar(str[i%3]);
			break;
		}
		else if((m&q)!=0)//有权限添加r、w、x、
		{
			switch(i%3)//得出0,1,2
			{
			case 0 ://036
				putchar('r');
				break;
			case 1 ://147
				putchar('w'); ----------错误代码
				break;
			case 2 ://258
				putchar('x');
				break;
			}
	
		}
			q=q>>1;

	}*/
	char buf[]="rwx";
	for(int i=0;i<9;i++)
	{
		if( (m & (0400)>>i) == 0)
		{
			putchar('-');
			continue;
		}
		printf("%c",buf[i%3]);
	}
	putchar(' ');


	return;

}
//获取文件类型
void get_filetype(mode_t m)
{
	if(S_ISREG(m))
		putchar('-');
	else if(S_ISDIR(m))
		putchar('d');
	else if(S_ISCHR(m))
		putchar('c');
	else if(S_ISBLK(m)) 
		putchar('b');
	else if(S_ISFIFO(m))
		putchar('p');
	else if(S_ISLNK(m))
		putchar('l');
	else if(S_ISSOCK(m))
		putchar('s');
}
	int main(int argc, const char *argv[])
{
 	DIR* dp=opendir("./");//打开一个目录
	if(NULL==dp)
	{ 
		ERR_MSG("opendir");//判断是否打开成功
		return -1;
	}
	printf("目录打开成功\n");
    struct dirent *rp=NULL;
	while(1)
	{
		struct dirent *rp=readdir(dp);
		if(NULL==rp)
		{
			break;
		}
		//获取文件属性
		struct stat buf;
		if(stat(rp->d_name,&buf)<0)
		{
			ERR_MSG("stat");
			return -1;

		}
				//获取文件的类型及其权限
		
		get_filetype(buf.st_mode);
		get_filepermission(buf.st_mode);

		//文件的硬链接数
		printf("%ld ",buf.st_nlink);
		//文件所属用户的id号
		struct passwd* pwd=getpwuid(buf.st_uid);
		if(NULL==pwd)
		{
			ERR_MSG("getpwuid");
			return -1;
		}
		printf("%s ",pwd->pw_name);	

		struct group* grp=getgrgid(buf.st_gid);
		if(NULL==grp)
		{
			ERR_MSG("getgrgid");
			return -1;
		}
		printf("%s ",grp->gr_name);
		//文件的大小
		printf("%ld\t  ",buf.st_size);
	//将秒数转换成年月日
		
//	time_t t2=buf.st_mtime;
//	struct tm* info =NULL;
	
//	{		time(&t2);//time_t *tloc=&t2;
	//	info = localtime(&t2);
	  
		//时间
		struct tm* info=NULL;
		info=localtime(&buf.st_mtime);

		printf("%d月 %d  %02d:%02d ",\
				info->tm_mon+1,info->tm_mday,\
				info->tm_hour,info->tm_min);
	printf("%s\n",rp->d_name);


	}
	putchar(10);

	 
	return 0;

}

熬不住了先交作业

3.效果图

IO学习day3(文件IO、文件属性、目录IO)_第1张图片

你可能感兴趣的:(学习)