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);
}
}
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章