其实系统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的 有需要学习的,可以拉下来玩一下 谢谢大家访问