博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现tail
阅读量:5166 次
发布时间:2019-06-13

本文共 3494 字,大约阅读时间需要 11 分钟。

编程之路刚刚开始,错误难免,希望大家能够指出。

 

自己实现一个tail的功能(使用IO系统调用),完全类似的操作步骤就不实现了,主要是让自己加深了解。

下面的代码不足之处很多,以后有空改正。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 7 #define BUF_SIZE 1024 8 9 int GetFileLine(int fd) 10 { 11 int iLine = 0; 12 char czBuf[BUF_SIZE+1] = {
0}; 13 while(1) 14 { 15 memset(czBuf,0,BUF_SIZE+1); 16 int ret = read(fd,czBuf,BUF_SIZE); 17 if(ret < 0) 18 { 19 perror("read"); 20 return -1; 21 } 22 else if(ret == 0) 23 { 24 break; 25 } 26 else 27 { 28 for(int index = 0;index < BUF_SIZE;index++) 29 { 30 if(czBuf[index] == '\n') 31 { 32 iLine++; 33 } 34 } 35 } 36 } 37 38 int ret = lseek(fd,0,SEEK_SET); 39 if(ret < 0) 40 { 41 perror("lseek"); 42 return -2; 43 } 44 45 return iLine; 46 } 47 48 int myTail(int fd,int line) 49 { 50 int iLine = GetFileLine(fd); 51 int ret = -1; 52 char czBuf[BUF_SIZE+1] = {
0}; 53 if(iLine < 0) 54 { 55 return -1; 56 } 57 58 if(line < iLine) 59 { 60 int iStartLine = iLine - line - 1; 61 int iCurLine = 0; 62 int flag = -1; 63 while(1) 64 { 65 memset(czBuf,0,BUF_SIZE+1); 66 ret = read(fd,czBuf,BUF_SIZE); 67 if(ret < 0) 68 { 69 perror("read"); 70 return -1; 71 } 72 else if(ret == 0) 73 { 74 break; 75 } 76 else 77 { 78 if(flag == -1) 79 { 80 for(int index = 0;index < BUF_SIZE;index++) 81 { 82 if(czBuf[index] == '\n') 83 { 84 if(iCurLine == iStartLine) 85 { 86 flag = 0; 87 printf("%s",czBuf+index); 88 break; 89 } 90 iCurLine++; 91 } 92 } 93 } 94 else if(flag == 0) 95 { 96 printf("%s",czBuf); 97 } 98 } 99 }100 }101 else102 {103 while(1)104 {105 char czBuf[BUF_SIZE] = {
0};106 ret = read(fd,czBuf,BUF_SIZE);107 if(ret < 0)108 {109 perror("read");110 return -3;111 }112 else if(ret == 0)113 {114 break;115 }116 else117 {118 printf("%s",czBuf);119 }120 }121 }122 return 0;123 }124 125 int main(int argc,char *argv[])126 {127 int fd = open("test.txt",O_RDONLY);128 if(fd < 0)129 {130 perror("open");131 return -1;132 }133 134 int ret = myTail(fd,3);135 if(ret < 0)136 {137 close(fd);138 return -2;139 }140 141 close(fd);142 return 0;143 }

 

转载于:https://www.cnblogs.com/jiangyibo/p/8858582.html

你可能感兴趣的文章
让窗体自适应屏幕
查看>>
vim插件之marks
查看>>
常用 SQL 命令和ASP 编程
查看>>
win10的资源管理器,边框不见了
查看>>
CentOS 网络设置修改
查看>>
二分图
查看>>
python小白-day5 random模块
查看>>
Git Tips
查看>>
2019春第一次课程设计报告
查看>>
Permutations
查看>>
msp430项目编程13
查看>>
【IIS】IIS 7.0/7.5 绑定
查看>>
[SQL] 命令远程恢复数据库
查看>>
人生得以遇见
查看>>
让 .gitignore 文件生效
查看>>
用Python3实现的Mycin专家系统简单实例
查看>>
TortoiseSVN tutorial
查看>>
poj-2376 Cleaning Shifts (排序+贪心)
查看>>
mssql 创建触发器
查看>>
2.python数据结构的性能分析
查看>>