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);
}
}
}

cat命令的简单实现的更多相关文章

  1. linux下cat命令详解

    简略版: cat主要有三大功能:1.一次显示整个文件.$ cat filename2.从键盘创建一个文件.$ cat > filename     只能创建新文件,不能编辑已有文件.3.将几个文 ...

  2. 13个Cat命令管理文件实例汇总

    在Linux系统中,大多数配置文件.日志文件,甚至shell脚本都使用文本文件格式,因此,Linux系统存在着多种文本编辑器,但当你仅仅想要查看一下这些文件的内容时,可使用一个简单的命令-cat. c ...

  3. 13个Cat命令管理(显示,排序,建立)文件实例

    在Linux系统中,大多数配置文件.日志文件,甚至shell脚本都使用文本文件格式,因此,Linux系统存在着多种文本编辑器,但当你仅仅想要查看一下这些文件的内容时,可使用一个简单的命令-cat. c ...

  4. cat命令常用的13个技巧

    在Linux系统中,大多数配置文件.日志文件,甚至shell脚本都使用文本文件格式,因此,Linux系统存在着多种文本编辑器,但当你仅仅想要查看一下这些文件的内容时,可使用一个简单的命令-cat. c ...

  5. Linux:最终用途cat命令查看不可见的字符

    常,的程序或软件,并没有语法错误,你检查其内容没有发现相关问题.这是时间,因为你用普通的文本编辑软件来查看,有很多的字符显示不出来的,但在最终用途cat命令可以很easy地检測出是否存在这些字符. ~ ...

  6. Linux学习历程——Centos 7 cat命令

    一.命令介绍 我们使用man cat命令,可以看到cat命令的用途是连接文件或标准输入并打印,简单来说cat命令是用来查看纯文本文件(通常为内容较少的文件),与重定向符号配合使用,可以实现创建文件与合 ...

  7. cat命令合并多个txt文件

    cat是concatenate的缩写,意为串联,之前经常看到别人在用cat命令,没有细究 cat命令两个常用的用法是: cat file.txt能够将txt中的内容显示出来 cat file1.txt ...

  8. Linux命令 cat命令

    这个命令可不是“猫”的意思,而是catenate的缩写.顾名思义,是把东西串起来.比如:cat file1 file2就是把文件file1和file2连在一起,然后输出到屏幕上.注意,输出到屏幕上是c ...

  9. 【Linux】- cat命令的源码历史

    转自:Cat 命令的源码历史 以前我和我的一些亲戚争论过计算机科学的学位值不值得读.当时我正在上大学,并要决定是不是该主修计算机.我姨和我表姐觉得我不应该主修计算机.她们承认知道如何编程肯定是很有用且 ...

随机推荐

  1. mtd设备操作、jffs2

    安装mtd相关命令 手动安装mtd-utils,根据系统自行选择 mtd交叉编译:https://blog.csdn.net/zhangxuechao_/article/details/5212442 ...

  2. AutoMapper 初次使用心得

    本例以asp.net webform为例: 结构: 主要代码:AutoMapperConfig 类 public class AutoMapperConfig { public static void ...

  3. springboot使用过滤器Filter

    先创建过滤器配置类: ## 引入的包部分省略... @Configuration public class FilterConfig { @SuppressWarnings({"rawtyp ...

  4. java操作redis(jedis)常用方法示例

    说明:redis命令和jedis方法名基本是一一对应的 Redis常用命令1 连接操作命令 ● quit:关闭连接(connection) ● auth:简单密码认证 ● help cmd: 查看cm ...

  5. 2013.6.22 - OpenNE第二天

    果然看中文材料就比较顺利,才半个小时就看完了一篇非常简单的综述<命名实体识别研究进展综述>(孙镇.王惠临).这个是2010年的文章,其实就是一个 科普文章,简述了国内外NER这块的历史如何 ...

  6. typescript 模块

    模块:模块可以帮助开发者将代码分割为重用的单元.开发者可以自己决定将模块中的哪些资源(类,方法,变量)暴露出去供外部使用,哪些资源只在模块内使用 在ts里面,一个文件就是一个模块,并没有什么特殊的标识 ...

  7. S3cmd

    一:安装方法 #wget http://nchc.dl.sourceforge.net/project/s3tools/s3cmd/1.0.0/s3cmd-1.0.0.tar.gz #tar -zxf ...

  8. 抖音热门BGM爬虫下载

    下午无聊在某网上刷了会儿抖音,发现有些音乐还是挺好听的,可以用来做手机铃声,于是想办法从某网上把歌曲爬下来 附上代码: #!/usr/bin/env python # -*- coding: utf- ...

  9. Vue当中的this

    10事件绑定 methods当中的this就是Vue实例对象vm var vm = new Vue({ el: '#app', data: { num: 0 }, // 注意点: 这里不要忘记加逗号 ...

  10. PHP——json_encode转码保留中文

    前言 特殊的情况,特殊对待吧.转码为GBK再json_encode会报错,因为json_encode是只支持utf8的. 代码 文档 | https://www.php.net/manual/en/f ...