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\n",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\n",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]=='\n'){
			  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);
		}
	}
}
posted @   battzion  阅读(1152)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示