cat命令的简单实现

cat命令的简单实现

目标:简单的实现cat命令

实现的mic_cat命令主要有三大功能

1.mic_cat命令一次显示整个文件 $ mic_cat filename

2.mic_cat命令从键盘创建一个文件 $ mic_cat > filename

3.mic_cat命令将几个文件合并为一个文件 $ mic_cat filename1 filename2 >file

实现的参数(最常用的两个)

-n 由1开始对所有输出行数编号
-s 当遇到两行以上的空白行,就换为一行空白

代码

环境:ubuntu 14.04 gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)
新手菜鸟 如有错误 欢迎指正

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<stdbool.h>
#define LENMAX 512
bool show_number=false;
bool squeeze_blank=false;
bool had_blank=false;
void do_cat(FILE *);
int main(int argc,char *argv[])
{
	int opt;
	FILE * fp;
	while((opt=getopt(argc,argv,"sn"))!=-1){
		switch(opt){
			case 's':
				squeeze_blank=true;
				break;
			case 'n':
				show_number=true;
				break;
			case '?':
				printf("unknow option :%c
",optopt);
				exit(1);
		}
	}
	if(argc==1)
	  do_cat(stdin);
	else
		for(; optind<argc;optind++){
			fp=fopen(argv[optind],"r");
			if(!fp){
				printf("open error :%s
",argv[optind]);
				exit(1);
			}
			do_cat(fp);
		  }
}
void do_cat(FILE *fp)
{
	char line[LENMAX];
	int l=1;
	while(fgets(line,LENMAX,fp)){
		if(squeeze_blank)
		{
			if(line[0]=='
'){
			  if(had_blank==false){
				  if(show_number)
					printf("%d    ",l++);
                  fputs(line,stdout);
				  had_blank=true;
			  }
			  else
				continue;
			}
			else{
				if(show_number)
		          printf("%d    ",l++);
				fputs(line,stdout);
				had_blank=false;
			}
			  

		}
		else{
			if(show_number)
			  printf("%d    ",l++);
			fputs(line,stdout);
		}
	}
}
原文地址:https://www.cnblogs.com/battzion/p/4218570.html