zoukankan      html  css  js  c++  java
  • 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);
    		}
    	}
    }
    
  • 相关阅读:
    设计模式(四)多例模式
    python之decode、encode及codecs模块
    python pyqt
    python读取命令行参数的方法
    python urllib、urlparse、urllib2、cookielib
    百度文档免费下载
    python之控制台(console)颜色显示
    python修改注册表
    python之爬虫
    xmlns和xsi之schemaLocation
  • 原文地址:https://www.cnblogs.com/battzion/p/4218570.html
Copyright © 2011-2022 走看看