tac命令的实现
来源:互联网 发布:蚂蚁代理浏览器软件 编辑:程序博客网 时间:2024/06/10 01:08
此程序实现简化的linux中的tac命令。即对文件按行倒序输出。
首先将文件指针置于文件尾,从后向前移动指针,
将两个换行符'\n'间的内容作为一行输出。
#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/types.h>#include <sys/stat.h>#include <fcntl.h>#define BUFSIZE 4096char buf[BUFSIZE];void reverse(int fp); void main(int argc,char*argv[]){ int fp; int i=1; if(argc==1) { fp=STDIN_FILENO; reverse(fp); } for(;i<argc;i++) { if((fp=open(argv[i],O_RDONLY))==-1) { fprintf(stderr,"open %s error\n",argv[i]); continue; } reverse(fp); close(fp); } exit(0);}void reverse(int fp){ off_t offset; int count=0; char tmp[2]={0}; if((offset=lseek(fp,-1,SEEK_END))==-1)//将文件指针指向最后一个字符。 { printf("seek error\n"); return; } while(1) //从后向前扫描文件,每遇到两个\n符,将之间的字符串作为一行输出。 { //只包含后一个\n符(左开右闭),直至到文件开头。 pread(fp,tmp,1,offset); count++; //count用来统计两个\n符间字符个数。 while(strcmp(tmp,"\n")!=0&&offset!=0) { offset=lseek(fp,-1,SEEK_CUR); pread(fp,tmp,1,offset); count++; } if(offset==0) //若文件指针在文件开头,从此处读取长度count的字符串并输出。 { pread(fp,buf,count,offset); buf[count]='\0'; printf("%s",buf); break; } else { offset=lseek(fp,1,SEEK_CUR); //若文件指针指向\n符,指针向后移动一位,跳过该\n; pread(fp,buf,--count,offset);//并读取长度count-1的字符串并输出。 buf[count]='\0'; printf("%s",buf); offset=lseek(fp,-2,SEEK_CUR);//文件指针向前移动2位; count=1; //重新计数,此时已经读取了一个\n。 } }}
0 0
- tac命令的实现
- Linux tac --与cat相反的命令
- 文件处理命令tac
- cat,tac与rev命令
- [一天几个linux命令] tac
- 一天一命令,天天五分钟(cat, tac, nl的命令用法)
- Linux显示文本的命令(cat, tac,more,less,head,tail,nl)
- cat ,tac ,more,less ,head,tail 和文本相关的命令用法
- 关于LINUX中的cat、tac、rev命令
- Linux显示文件命令之cat/tac
- Mac 下安装使用tac命令
- 文本查看命令 - cat和tac
- 初学linux命令-cd、cat、tac
- Linux命令(1)-cat & 反向tac
- 纯C++游戏编程: Tic-Tac-Toe(三连棋游戏)的实现
- 用awk实现head、tail和tac
- 详解Tic-Tac-Toe人工智能实现
- tac命令以及各种linux文件查看命令
- c的函数指针
- 条款10:令operator=返回一个reference to *this
- 第一杯茶—启动茶
- Matlab实现Butterworth滤波器
- Java中extends与implements的区别
- tac命令的实现
- 配置文件被编辑后,vim打开每行都有^M
- java面试笔试题整理
- 【leetcode】Valid Sudoku
- c语言头文件中函数是否加extern
- zoj3791(An Easy Game) DP
- 随机带权选取文件中一行
- struts2中的constant配置详解
- 开放寻址法PYTHON实现