如何去打造属于自己的cat文件

其实系统cat命令相对功能是比较全的,但是总结下来也只有几点;

 1:查看文件 cat  cat a.txt 查看
 2:输入到文本文件中 cat > a.txt //输出重定向
 3:重定向输出到文本文件中 cat < a.txt  //输入重定向

直奔主题:上代码

#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include"io.h"
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>

int main(int argc,char *argv[]){
    int fdin = STDIN_FILENO;
    int fdout = STDOUT_FILENO;

    int i=0;
    for(i=1;i<argc;i++){

        fdin = open(argv[i],O_RDONLY);
        if(fdin <0){
            perror("read error\n");
            continue;
        }
        copy(fdin,fdout);
        close(fdin);
    }
    if(argc == 1){
        copy(fdin,fdout);
    }
    return 0;
}
#include<unistd.h>
#include"io.h"
#include<malloc.h>
#include<stdio.h>
#include<errno.h>
#include<sys/types.h>

#define BUFFER_SIZE 1024
char * str = "7777799900876555";
#define OFFSET 10
/**
*关于文件的拷贝函数
*
*/
extern void copy(int fdin,int fdout){
    ssize_t size_in;
    ssize_t size_out;
    char* buffer = (char*)malloc(BUFFER_SIZE*sizeof(char));

    while((size_in = read(fdin,buffer,BUFFER_SIZE)) != 0){
        if(size_in > 0){
            fprintf(stdout,"read success\n");
            size_out = write(fdout,buffer,size_in);
            if(size_out > 0){
                fprintf(stdout,"write success\n");
            }else{
                fprintf(stderr,"write error:%s\n",strerror(errno));
            }
        }else{
            fprintf(stderr,"read error:%s\n",strerror(errno));
        }
    }

    free(buffer);
}

/**
*在原来拷贝过后的文件后面创建空洞文件,隔去一些空白的字节后,然后再去写
*SEEK_CUR 从当前位置开始定位
*SEEK_END 从结束开始定位
SEEK_SET   从开始的位置
*/
extern void writeNullFile(int fdout){
    lseek(fdout,OFFSET,SEEK_END);
    ssize_t size_out;
    size_out = write(fdout,str,sizeof(str)/sizeof(char));

    if(size_out >0){
        fprintf(stdout,"write success\n");
    }else{
        fprintf(stdout,"write error\n",strerror(errno));
    }
}
#ifndef __IO_H__
#define __IO_H__

/**
*拷贝函数
*/
extern void copy(int  fdin,int fdout);

/**
*使用lseek函数来创建空洞文件
*/
extern void writeNullFile(int fdout);
#endif

代码是可以直接run的 有需要学习的,可以拉下来玩一下 谢谢大家访问

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值