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

自己实现一个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. learning ddr reset initialization with stable power

  2. 【收集资料】OpenGL学习

    1.课本配套网站,有Sample Code和书中的图片等   http://math.ucsd.edu/~sbuss/MathCG/ 2.Visual C++的帮助系统可查阅基本OpenGL函数(不包 ...

  3. java项目性能测试过程记录

    一 准备环境和指标 1.主机三台(linux,这里显示的都是伪主机地址):最好用干净的机子,做性能测试的时候别装其他东西在上面跑.  100.22.0.98  部署自己的项目服务 100.22.0.9 ...

  4. 十四. Python基础(14)--递归

    十四. Python基础(14)--递归 1 ● 递归(recursion) 概念: recursive functions-functions that call themselves either ...

  5. Android : 基于alsa库的音乐播放

    继上篇:Android : alsa-lib 移植 ,这篇随笔实现一个demo基于移植好的alsa库在Android平台上播放wav文件: 一.利用ffmeg将一个mp3文件转换成wav文件: (1) ...

  6. 深入理解java虚拟机---JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)(十二)

    引用:https://www.cnblogs.com/yulei126/p/6777323.html JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)   1.背景 2.为什么废 ...

  7. SQL-38 创建视图

    题目描述 针对actor表创建视图actor_name_view,只包含first_name以及last_name两列,并对这两列重新命名,first_name为first_name_v,last_n ...

  8. 实现html转png

    公司要求将一些重要数据全部以图片的形式放在官网上,防止网络爬虫. 之前都是UI作图,人工上传,为了解放生产力,于是我们程序处理. 步骤: 1.html得到与原图一致的图片(交给前端处理) 2.html ...

  9. HTTPS加密原理(转)

    Header HTTP.HTTPS在我们日常开发中是经常会接触到的. 我们也都知道,一般 Android 应用开发,在请求 API 网络接口的时候,很多使用的都是 HTTP 协议:使用浏览器打开网页, ...

  10. Python 基础数据类型相互转换

    字符串,数字,列表 ,元祖,字典 化相互转化 1 Int 与 str 之间如何转化,转换的结果是什么?有没有条件?     #str(int型)可以转化为str 该过程没有条件     #字符串转化为 ...