作业10.10

 要求输入目录的路径后,能够打印出指定路径下所有文件的详细信息,类似ls -l

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

void mode_i(mode_t mode){
	int i=0;
	for(i=0;i<9;i++){
		if((mode&(0400>>i))==0){
			putchar('-');
			continue;
		}
		switch(i%3){
			case 0:
				putchar('r');
				break;
			case 1:
				putchar('w');
				break;
			case 2:
				putchar('x');
				break;
		}
	}
	putchar(10);
}
void  fun(time_t t){
	struct tm *info=localtime(&t);
	if(NULL==info){
		perror("localtime");
		return;
	}
	printf("%02d-%02d %02d:%02d:%02d",\
			info->tm_mon+1,info->tm_mday,\
			info->tm_hour,info->tm_min,info->tm_sec);
	return;
}

int lin_leiixng(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');
	return 0;
}

void get_filename(uid_t uid){
	struct passwd *pwd=getpwuid(uid);
	if(NULL==pwd){
		perror("getpwuid");
		return;
	}
	printf("%s",pwd->pw_name);
	return;
}

void get_filegpname(gid_t  gid){
	struct group * grp=getgrgid;
	if(NULL==grp){
		perror("getgrgid");
		return;
	}
	printf("%s",grp->gr_name);
	return;
}


int main(int argc, const char *argv[])
{
	//打开一个目录
	DIR *dp=opendir("./");
	if(NULL==dp){
		perror("opendir");
		return -1;
	}
	printf("目录打开成功\n");

	//读取目录
	struct dirent *rp;
	while(1){
		rp=readdir(dp);
		if(NULL==rp){
			if(0==errno){
				printf("目录读取完毕\n");
				break;
			}
			else{
				perror("readdir");
				return -1;
			}
		}
		struct stat buf;
		int p=stat(rp->d_name,&buf);

		if(p<0){
			perror("stat");
			return -1;
		}
		lin_leiixng(buf.st_mode);
		mode_i(buf.st_mode);
		printf("%ld ",buf.st_nlink);

		//文件所属用户
		get_filename(buf.st_uid);

		//文件所属组用户
		get_filegpname(buf.st_gid);

		//文件的大小
		printf("%ld",buf.st_size);

		//文件的时间
		fun(buf.st_ctime);
		printf(" %s ",rp->d_name);
		printf("\n");
	}

	closedir(dp);
	return 0;
}

 

你可能感兴趣的:(c++,算法,linux)