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

📄 ls.c

📁 linux下shell命令"ls -l"的C语言实现方法。
💻 C
字号:
#include <stdio.h>#include <time.h>#include <stdlib.h>#include <errno.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <dirent.h>#include <string.h>int main(int argc,char *argv[]){	DIR *dir;	struct dirent *dp;	int n;	int i;	char s[30];	struct tm *ts;	struct stat p;	void ls(char *);	if(argc!=2)	{	printf("Put one filename!\n");	exit(1);	}	n=stat(argv[1],&p);	if(n<0)	{	printf("%s\n",strerror(errno));	exit(1);	}		n=p.st_mode&(017<<12);	switch (n)	{		case 0100000:ls(argv[1]);break;		case 0040000:{				if((dir=opendir(argv[1]))==NULL)				{					printf("%s\n",strerror(errno));exit(1);				}								while((dp=readdir(dir))!=NULL)			{			//	strcpy(s,"../");				strcpy(s,argv[1]);                                strcat(s,"/");                                strcat(s,dp->d_name);				ls(s);			}			} break;		default:printf("Error:shoud input a file or a directory!\n"); break;	}}void ls(char *name)	{		int n,i;	struct tm *ts;	struct stat p;		n=stat(name,&p);	if(n<0)	{	printf("%s\n",strerror(errno));	exit(1);	}/* file type*/	n=p.st_mode&(017<<12);		switch (n)	{		case 0140000:printf("s");break;		case 0120000:printf("l");break;		case 0100000:printf("-");break;		case 0060000:printf("b");break;		case 0040000:printf("d");break;		case 0020000:printf("c");break;		case 0010000:printf("p");break;	}		for(i=0,n=8;i<3;i++)	{				if(p.st_mode&(01<<n--))		printf("r");		else		printf("-");		if(p.st_mode&(01<<n--))		printf("w");		else		printf("-");		if(p.st_mode&(01<<n--))		printf("x");		else		printf("-");			}/*	n=p.st_mode&(01<<8);	if(n==0400)	printf("r");	else	printf("-");		 n=p.st_mode&(01<<7);	if(n==0200)	printf("w");	else	printf("-");		n=p.st_mode&(01<<6);	if(n==0100)	printf("x");	else	printf("-");*/	/*number of hard link*/	printf("%4d",p.st_nlink);/*user ID of owner*/	printf("%9d",p.st_uid);/*group ID of owner*/	printf("%9d",p.st_gid);	/*size of the file*/	printf("  %d",p.st_size);	/*time of last modification*/	ts=localtime(&p.st_mtime);	printf("  %4d-%2d-%2d  %2d:%2d:%2d\n",ts->tm_year+1900,ts->tm_mon+1,ts->tm_mday,ts->tm_hour,ts->tm_min,ts->tm_sec);}

⌨️ 快捷键说明

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