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

📄 lsl.c

📁 Linux网络编程PPT和源码,供学习参考
💻 C
字号:
#include <stdio.h>#include <sys/types.h>#include <dirent.h>#include <sys/stat.h>#include <string.h>void do_ls( char *,int );void dostat( char *,char * );void show_file_info( char *,struct stat *,char * );void mode_to_letters( int,char * );char * uid_to_name( uid_t );char * gid_to_name( gid_t );int main( int argc ,char *argv[] ){	if( argc==1 )	{		do_ls( ".",0 );		}	else	{		if(!strcmp(argv[1],"-a"))		{			if(argc==3)				do_ls( argv[2],0 );			else if(argc==2)				do_ls( ".",0 );		}		else if(!strcmp(argv[1],"-l"))		{			if(argc==3)				do_ls( argv[2],1 );			else if(argc==2)					do_ls( ".",1 );		}	}	return 0;}void do_ls( char dirname[],int type ){	DIR * dir_ptr;	struct dirent * direntp;	char tmp[1024]={0};	if ( (dir_ptr = opendir(dirname))==NULL )		fprintf(stderr,"lsl : cannot open %s\n",dirname);	else	{		while( (direntp = readdir(dir_ptr)) != NULL )		{			if(direntp->d_name[0]=='.')				continue;			if(type)			{				strcpy(tmp,dirname);				strcat(tmp,"/");				strcat(tmp,direntp->d_name);				dostat( tmp,dirname );				strcpy(tmp,"");			}			else				printf("%s\n",direntp->d_name);		}					closedir(dir_ptr);	}}void dostat( char * filename,char *dirname ){	struct stat info;	if (stat(filename,&info)==-1)		{		perror(filename);	}	else		show_file_info(filename,&info,dirname);}void show_file_info(char *filename,struct stat * info_p,char *dirname){	char modestr[11];	mode_to_letters( info_p->st_mode,modestr );				printf("%s",modestr);	printf("%4d ",(int)info_p->st_nlink);	printf("%-8s",uid_to_name(info_p->st_uid));	printf("%-8s",gid_to_name(info_p->st_gid));	printf("%8ld ",(long)info_p->st_size);	printf("%.12s ",4+ctime(&info_p->st_mtime));	printf(" %s\n",filename+strlen(dirname)+1);}void mode_to_letters( int mode,char *str ){	strcpy(str,"----------");	/* macro */	if(S_ISDIR(mode)) str[0]='d';	/* directory */	if(S_ISCHR(mode))	str[0]='c'; /* char devices */	if(S_ISBLK(mode)) str[0]='b'; /* block device */	if( mode&S_IRUSR ) str[1]='r';	/* 3 bit for user */	if( mode&S_IWUSR ) str[2]='w';  if ( (mode & S_ISUID) && (mode & S_IXUSR) )		str[3] = 's';  else if ( (mode & S_ISUID) && !(mode & S_IXUSR) )		str[3] = 'S';  else if ( mode & S_IXUSR ) 		str[3] = 'x';	if( mode&S_IRGRP ) str[4]='r';	/* 3 bit for group */	if( mode&S_IWGRP ) str[5]='w';  if ( (mode & S_ISGID) && (mode & S_IXGRP) )		str[6] = 's';  else if ( (mode & S_ISGID) && !(mode & S_IXGRP) )		str[6] = 'S';  else if ( mode & S_IXGRP ) 		str[6] = 'x';	if( mode&S_IROTH ) str[7]='r';	/* 3 bit for other */	if( mode&S_IWOTH ) str[8]='w';  if ( (mode & S_ISVTX) && (mode & S_IXOTH) )		str[9] = 't';  else if ( (mode & S_ISVTX) && !(mode & S_IXOTH) )		str[9] = 'T';  else if ( mode & S_IXOTH ) 		str[9] = 'x';}#include <pwd.h>char * uid_to_name(uid_t uid){	struct passwd *pw_ptr;	static char numstr[10];	if((pw_ptr=getpwuid(uid))==NULL)	{		sprintf(numstr,"%d",uid);		return numstr;	}	else 		return pw_ptr->pw_name;}#include <grp.h>char * gid_to_name(gid_t gid) {	struct group *grp_ptr;	static char numstr[10];		if((grp_ptr=getgrgid(gid))==NULL)	{		sprintf(numstr,"%d",gid);		return numstr;	}	else		return grp_ptr->gr_name;}

⌨️ 快捷键说明

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