mycat命令——cat命令的自我代码实现
2012-01-02 21:03
253 查看
mycat命令——cat命令的自我代码实现
09年夏天的小程序,今天把它转更到这个博客上面。mycat命令所要实现的功能类似与系统的cat命令,使用shell脚本语言来实现,下面就简要地说明cat命令的功能:
用法:cat [选项] [文件]...
将[文件]或标准输入组合输出到标准输出。
-A, --show-all 等同于 -vET,将文件内容完全显示出来
-b, --number-nonblank 对非空输出行编号
-e, --等同于 -vE
-E, --show-ends 在每行结束处显示 $
-n, --number 对输出的所有行编号
-s, --squeeze-blank 不输出多行空行
-t, --与 -vT 等价
-T, --show-tabs 将跳格字符显示为 ^I
-v, --show-nonprinting 列出一些看不见的字符
说明:关于cat还有其他参数,比如--help,--version, -u等等。这里只是列出了比较常见的几个参数。各位可以根据情况尽可能多的实现上述的参数。
以上是cat命令的一些基本的功能,新成员在实现的不必要将每个功能实现,有些功能不是很常用,就没有必要去实现了,但是你可以扩展mycat的功能,而不是仅仅停留在cat命令本身。
以下是我的mycat命令的实现:
#include<stdio.h>
#include<stdlib.h>
FILE*fp;
charch;
inti=1;
main(intargc,char**argv)
{
if(argc==1||argc>3)
{printf("命令用法错误\n该命令当且仅当接一个参数和文件名的时候使用\n用法:cat [选项] [文件]\n目前实现有linux下cat命令的-A -b -e -n -s-T和直接接文件名。\n-A,将文件内容完全显示出来\n-b,对非空输出行编号\n-e,在每行结束处显示 $\n-n,对输出的所有行编号\n-s,不输出多行空行\n-T,将跳格字符显示为^I\n");
exit(1);
}
else
{ fp=fopen(*(argv+argc-1),"r");
if(fp==NULL)
{printf("不能打开%s这个文件\n如需帮助请直接输入命令 \n",*(argv+argc-1));
exit(1);
}
elseif(argc==2)
{ ch=fgetc(fp);
while((ch=fgetc(fp))!=EOF)printf("%c",ch);
fclose(fp);
printf("\n");
}
else
{ if(strcmp(*(argv+1),"-A")==0) mycat_A();
if(strcmp(*(argv+1),"-b")==0) mycat_b();
if(strcmp(*(argv+1),"-e")==0) mycat_e();
if(strcmp(*(argv+1),"-n")==0) mycat_n();
if(strcmp(*(argv+1),"-s")==0) mycat_s();
if(strcmp(*(argv+1),"-T")==0) mycat_T();
}
}
}
?
各个子函数代码折叠,请点开查看
![](http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
子函数代码
1 void mycat_A() 2 { ch=fgetc(fp); 3 while((ch=fgetc(fp))!=EOF) 4 { if(ch=='\n') printf("$"); 5 if(ch==9) 6 { printf("^I"); 7 continue; 8 } 9 printf("%c",ch); 10 } 11 fclose(fp); 12 printf("\n"); 13 } 14 15 void mycat_b() 16 { char tmp='\n'; 17 ch=fgetc(fp); 18 while((ch=fgetc(fp))!=EOF) 19 { if(tmp=='\n'&&ch!='\n') 20 { printf("%d %c",i++,ch); 21 tmp=ch; 22 continue; 23 } 24 tmp=ch; 25 printf("%c",ch); 26 } 27 fclose(fp); 28 printf("\n"); 29 } 30 31 void mycat_e() 32 { ch=fgetc(fp); 33 while((ch=fgetc(fp))!=EOF) 34 { if(ch=='\n') printf("$"); 35 printf("%c",ch); 36 } 37 fclose(fp); 38 printf("\n"); 39 } 40 41 void mycat_n() 42 { ch=fgetc(fp); 43 printf("%d ",i); 44 while((ch=fgetc(fp))!=EOF) 45 { if(ch=='\n') 46 { printf("\n%d ",++i); 47 continue; 48 } 49 printf("%c",ch); 50 } 51 fclose(fp); 52 printf("\n"); 53 } 54 55 void mycat_s() 56 { char tmp='\n'; 57 ch=fgetc(fp); 58 while((ch=fgetc(fp))!=EOF) 59 { if(ch=='\n'&&tmp=='\n') tmp=ch; 60 else 61 { tmp=ch; 62 printf("%c",ch); 63 } 64 } 65 fclose(fp); 66 printf("\n"); 67 } 68 69 void mycat_T() 70 { ch=fgetc(fp); 71 while((ch=fgetc(fp))!=EOF) 72 { if(ch==9) 73 { printf("^I"); 74 continue; 75 } 76 printf("%c",ch); 77 } 78 fclose(fp); 79 printf("\n"); 80 }
复制代码
如需下载整个文件,请点击下载mycat.c
本程序开放源代码,遵守GNU,欢迎各种的改动和引用。
___________________________________________________________________
欢迎各种转载、引用,但请保留以下文字:
转载自光光_IT(贾耀光)的DiscoveryWorld (http://sunsun.cnblogs.com)
相关文章推荐
- php 仿 linux cat 命令实现代码
- cat命令的具体实现代码
- mycat实现linux cat命令相似功能
- 用c语言实现ping命令的原理及代码
- 实现linux中的cat命令的功能
- quagga 命令定义的代码分析--从定义到实现
- 如何用Javascript代码实现浏览器菜单命令
- Linux Bash代码 利用for循环实现命令的多次执行
- Linux下模拟ping命令的C代码实现2
- Shell中使用scp命令实现文件上传代码
- 用JAVA代码实现执行CMD命令的方法!
- 使用Git命令实现代码上传与同步
- Linux系统中,有两个文件file1和file2,每个文件的每一行都是#UUID,其中的每一UUID表示一个号。要找出在file1中有而在file2中没有的UUID,使用cat,sort,uniq三个命令如何实现
- C语言实现linux中cat命令
- unix cat 命令实现 c
- 通过java代码实现dos环境下多条命令的执行
- 设计模式----命令模式UML和实现代码
- Shell脚本中使用for循环和cat命令实现按顺序合并文件
- ASP.Net执行cmd命令的实现代码
- linux下C实现cat命令