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

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

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

 #include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h> #define BUF_SIZE 1024 int GetFileLine(int fd)
{
int iLine = ;
char czBuf[BUF_SIZE+] = {};
while()
{
memset(czBuf,,BUF_SIZE+);
int ret = read(fd,czBuf,BUF_SIZE);
if(ret < )
{
perror("read");
return -;
}
else if(ret == )
{
break;
}
else
{
for(int index = ;index < BUF_SIZE;index++)
{
if(czBuf[index] == '\n')
{
iLine++;
}
}
}
} int ret = lseek(fd,,SEEK_SET);
if(ret < )
{
perror("lseek");
return -;
} return iLine;
} int myTail(int fd,int line)
{
int iLine = GetFileLine(fd);
int ret = -;
char czBuf[BUF_SIZE+] = {};
if(iLine < )
{
return -;
} if(line < iLine)
{
int iStartLine = iLine - line - ;
int iCurLine = ;
int flag = -;
while()
{
memset(czBuf,,BUF_SIZE+);
ret = read(fd,czBuf,BUF_SIZE);
if(ret < )
{
perror("read");
return -;
}
else if(ret == )
{
break;
}
else
{
if(flag == -)
{
for(int index = ;index < BUF_SIZE;index++)
{
if(czBuf[index] == '\n')
{
if(iCurLine == iStartLine)
{
flag = ;
printf("%s",czBuf+index);
break;
}
iCurLine++;
}
}
}
else if(flag == )
{
printf("%s",czBuf);
}
}
}
}
else
{
while()
{
char czBuf[BUF_SIZE] = {};
ret = read(fd,czBuf,BUF_SIZE);
if(ret < )
{
perror("read");
return -;
}
else if(ret == )
{
break;
}
else
{
printf("%s",czBuf);
}
}
}
return ;
} int main(int argc,char *argv[])
{
int fd = open("test.txt",O_RDONLY);
if(fd < )
{
perror("open");
return -;
} int ret = myTail(fd,);
if(ret < )
{
close(fd);
return -;
} close(fd);
return ;
}

实现tail的更多相关文章

  1. head/tail实现

         只实现了head/tail的基本功能,默认显示十行及-n参数.       一.使用带缓冲的系统调用.       write/read等系统调用是不带缓冲的,可以包装一层,使其带缓冲. t ...

  2. REDHAT一总复习1 输出重定向及head tail的用法

    1.使用bash命令,在server机上完成以下任务.(考点是:head  tail的使用) .显示/usr/bin/clean-binary-files文件的前12行,并将其输出到/home/stu ...

  3. tail命令详解

    搜索 纠正错误  添加实例 tail 在屏幕上显示指定文件的末尾若干行 补充说明 tail命令 用于输入文件中的尾部内容.tail命令默认在屏幕上显示指定文件的末尾10行.如果给定的文件不止一个,则在 ...

  4. Linux命令详解之—tail命令

    tail命令也是一个非常常用的文件查看类的命令,今天就为大家介绍下Linux tail命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux tail命令主要用来从指定点开始将文 ...

  5. linux命令之tail

    tail用于输出文件末尾部分.一个比较有用的功能是tail + grep实现类似于安卓开发时调试使用的logcat,具体操作是: 一般我是用SecureCRT连接linux,然后使用SecureCRT ...

  6. PHP实现linux命令tail -f

    PHP实现linux命令tail -f 今天突然想到之前有人问过我的一个问题,如何通过PHP实现linux中的命令tail -f,这里就来分析实现下. 这个想一想也挺简单,通过一个循环检测文件,看文件 ...

  7. tail -f 和 -F 的用法

    tail -f 和 -F 的用法  Tai 2010-08-16 16:03:18 -f 是--follow[=HOW]的缩写, 可以一直读文件末尾的字符并打印出来."[=HOW]" ...

  8. scala tail recursive优化,复用函数栈

    在scala中如果一个函数在最后一步调用自己(必须完全调用自己,不能加其他额外运算子),那么在scala中会复用函数栈,这样递归调用就转化成了线性的调用,效率大大的提高.If a function c ...

  9. linux head、tail、sed、cut、grep、find

    head用法: head 参数 文件名 -cn:显示前n个字节    -n:显示前n行 例子:head -c20 1.txt 显示1.txt文件中前20个字符 ls |  head -20:显示前20 ...

  10. linux命令每日一练习-tail

    tail 是查看文件的末尾 tail -n 5*** 显示文件×××的最后5行 tail -n +5 ××× 显示文件×××从第5行开始的内容 tail -f *** 监视文件×××的末尾.循环展示

随机推荐

  1. 用highchaarts做股票分时图

    1.首先向社区致敬给予灵感参考: https://bbs.hcharts.cn/thread-1985-1-1.html(给予参考的的例子js配置代码未进行压缩,可以清楚看到配置信息)   2.公司是 ...

  2. .NET接入UnionPay银联支付(一)手机wap支付

    最近呢,比较忙,公司在接入银联全渠道支付,博主接手的wap支付,发表一下博主在接入的时候遇到的坑和注意事项,方便大家学习接入,爬坑的路上更顺利一点~ 开发步骤 1. 以表单的方式组装要发送给银联全渠道 ...

  3. 【转载】OpenCV 摄像头控制

    参考:[OpenCV] -- 简单摄像头操作 - 代码人生 - 博客频道 - CSDN.NET http://blog.csdn.net/qiurisuixiang/article/details/8 ...

  4. myeclipse复制的文件代码乱码

    myeclipse复制的文件代码乱码 其实没有更改设置之前,并不会有此问题. 默认的设置,不要改.

  5. Docker小白从零入门到实战系列【二】

    1.安装好Centos 7 2.关闭SELINUX sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/configsetenfo ...

  6. js 循环遍历数组

    var a =[1,3,4]; a.each(functiom{ .... }) or for (var x in a ){ .... }

  7. Windows server 2016 安装 TFS

    一:准备: 1.1下载TFS https://visualstudio.microsoft.com/zh-hans/tfs/ 1.2 下载SQL2017 http://msdn.itellyou.cn ...

  8. mysql创建存储过程,定时任务,定时删除log

    -- 创建存储过程 清除30天前的日志create procedure deleteLog()BEGINdelete from contract_vlog where create_time<D ...

  9. 【Python】多进程2

    #练习:测试单进程和多进程执行效率 import multiprocessing import time def m1(x): time.sleep(0.01) return x * x if __n ...

  10. Spring Boot 揭秘与实战(九) 应用监控篇 - 自定义监控端点

    文章目录 1. 继承 AbstractEndpoint 抽象类 2. 创建端点配置类 3. 运行 4. 源代码 Spring Boot 提供的端点不能满足我们的业务需求时,我们可以自定义一个端点. 本 ...