⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p4.10.c

📁 实现类似linux系统提供的ls命令的功能
💻 C
字号:
#include <stdio.h>#include <sys/types.h>#include <dirent.h>#include <stdlib.h>#include <sys/stat.h>#include <unistd.h>const int N_BITS=3;typedef struct dir_lnk{	char d_name[256];	struct dir_lnk * next;}dirlnk;typedef struct item_info{	unsigned long inode; 	char permission[11];	int owner;	int group;	off_t size;	time_t mod_time;	char name[256];}info;dirlnk* get_dir_detail(char* dirname){	  DIR* dir;	  struct dirent* drt;	  dir=opendir(dirname);					   	  if(dir==NULL){		perror("Cannot open the desired directory");		return NULL;		}          dirlnk* dir_head=NULL;          dirlnk* cur_item=NULL;	  while((drt=readdir(dir))!=NULL){		if((strcmp(drt->d_name,".")==0)||(strcmp(drt->d_name,"..")==0))			continue;	 		dirlnk *next_item=(dirlnk*)malloc(sizeof(dirlnk));	 		if(cur_item==NULL)			cur_item=next_item;		else			cur_item->next=next_item;		cur_item=next_item;		if(dir_head==NULL)			dir_head=cur_item;	 		strcpy(cur_item->d_name,drt->d_name);	  } 		cur_item->next=NULL;		closedir(dir);				return dir_head;}void print_file_info(dirlnk* dir_head){	static char* perm[]={"---","--x","-w-","-wx",		"r--","r-x","rw-","rwx"};		unsigned int mask=0700;	struct stat file_stat;       	dirlnk* cur_dir=dir_head;	while(cur_dir!=NULL){		mask=0700;		info file_info;		if(stat(cur_dir->d_name,&file_stat)==-1){			perror("Cannot get the information of the file!");			cur_dir=cur_dir->next;			continue;		}	 			if(S_ISREG(file_stat.st_mode))			file_info.permission[0]='-';    		if(S_ISDIR(file_stat.st_mode))			file_info.permission[0]='d'; 	     	int i=3;	      	int j=0;	    	while(i>0)		{			file_info.permission[1+j*3]=perm[(file_stat.st_mode & mask)>>(i-1)*N_BITS][0];			file_info.permission[2+j*3]=perm[(file_stat.st_mode & mask)>>(i-1)*N_BITS][1];		       	file_info.permission[3+j*3]=perm[(file_stat.st_mode & mask)>>(i-1)*N_BITS][2];    			j++;			i--;		       	mask>>=N_BITS;	       	}                               file_info.permission[10]='\0';		file_info.owner=file_stat.st_uid;		file_info.group=file_stat.st_gid;	       	file_info.mod_time=file_stat.st_atime;		file_info.size=file_stat.st_size;		strcpy(file_info.name,cur_dir->d_name);		file_info.inode=file_stat.st_ino;	        	printf("%u  ",file_info.inode);		printf("%s  ",file_info.permission);		printf("%d  ",file_info.owner);		printf("%d  ",file_info.group);		printf("%u  ",file_info.size);		printf("%s  ",ctime(&file_info.mod_time));		printf("%s  \n",file_info.name);                	 	cur_dir=cur_dir->next;	}}int main(int argc, char* argv[]){		dirlnk* head=get_dir_detail(".");	print_file_info(head);			}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -