码迷,mamicode.com
首页 > 系统相关 > 详细

自己动手写shell命令之ls -R1fF

时间:2017-05-14 16:07:09      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:span   info   name   rcp   动手   实现   abs   效果   []   

    ls命令的R參数代表递归的列出全部子目录中的全部文件,1表示每一行仅仅显示一个文件或目录,f表示不排序即输出。F表示在每项的输出的最后依据其文件类型对应的加上*/=>@|字符。通过c语言实现ls -R1fF命令的效果,其源码例如以下:

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
#include <pwd.h>
#include <grp.h>
#include <string.h>

void listdir(char *);
char get_type(struct stat *);

int main(int argc,char * argv[])
{
	if(argc == 1)
		listdir(".");
	else
	{
		int index = 1;
		while(argc > 1)
		{
			listdir(argv[index]);
			index++;
			argc--;
		}
	}
	return 0;
}

void listdir(char * dirname)
{
	DIR * dir;
	struct stat info;
	//char pointer[];
	struct dirent * direntp;
	if((dir = opendir(dirname)) != NULL)
	{
		printf("%s:\n",dirname);
		while((direntp = readdir(dir)) != NULL)
		{
			char absolute_pathname[255];
			strcpy(absolute_pathname,dirname);
			strcat(absolute_pathname,"/");
			strcat(absolute_pathname,direntp->d_name);
			lstat(absolute_pathname,&info);
			printf("%s",direntp->d_name);
			printf("%c\n",get_type(&info));
		}
		printf("\n");
		rewinddir(dir);
		while((direntp = readdir(dir)) != NULL)
		{
			if(strcmp(direntp->d_name,".") == 0 || strcmp(direntp->d_name,"..") == 0)
				continue;
			char absolute_pathname[255];
			strcpy(absolute_pathname,dirname);
			strcat(absolute_pathname,"/");
			strcat(absolute_pathname,direntp->d_name);
			lstat(absolute_pathname,&info);
			if(S_ISDIR((&info)->st_mode))
				listdir(absolute_pathname);
		}
	}
}

char get_type(struct stat * info)
{
	if(S_ISCHR(info->st_mode))
		return ‘*‘;
	if(S_ISDIR(info->st_mode))
		return ‘/‘;
	if(S_ISSOCK(info->st_mode))
		return ‘=‘;
	if(S_ISBLK(info->st_mode))
		return ‘>‘;
	if(S_ISLNK(info->st_mode))
		return ‘@‘;
	if(S_ISFIFO(info->st_mode))
		return ‘|‘;
	return ‘ ‘;
}



自己动手写shell命令之ls -R1fF

标签:span   info   name   rcp   动手   实现   abs   效果   []   

原文地址:http://www.cnblogs.com/liguangsunls/p/6852654.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!