实现tail
编程之路刚刚开始,错误难免,希望大家能够指出。
自己实现一个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的更多相关文章
- head/tail实现
只实现了head/tail的基本功能,默认显示十行及-n参数. 一.使用带缓冲的系统调用. write/read等系统调用是不带缓冲的,可以包装一层,使其带缓冲. t ...
- REDHAT一总复习1 输出重定向及head tail的用法
1.使用bash命令,在server机上完成以下任务.(考点是:head tail的使用) .显示/usr/bin/clean-binary-files文件的前12行,并将其输出到/home/stu ...
- tail命令详解
搜索 纠正错误 添加实例 tail 在屏幕上显示指定文件的末尾若干行 补充说明 tail命令 用于输入文件中的尾部内容.tail命令默认在屏幕上显示指定文件的末尾10行.如果给定的文件不止一个,则在 ...
- Linux命令详解之—tail命令
tail命令也是一个非常常用的文件查看类的命令,今天就为大家介绍下Linux tail命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux tail命令主要用来从指定点开始将文 ...
- linux命令之tail
tail用于输出文件末尾部分.一个比较有用的功能是tail + grep实现类似于安卓开发时调试使用的logcat,具体操作是: 一般我是用SecureCRT连接linux,然后使用SecureCRT ...
- PHP实现linux命令tail -f
PHP实现linux命令tail -f 今天突然想到之前有人问过我的一个问题,如何通过PHP实现linux中的命令tail -f,这里就来分析实现下. 这个想一想也挺简单,通过一个循环检测文件,看文件 ...
- tail -f 和 -F 的用法
tail -f 和 -F 的用法 Tai 2010-08-16 16:03:18 -f 是--follow[=HOW]的缩写, 可以一直读文件末尾的字符并打印出来."[=HOW]" ...
- scala tail recursive优化,复用函数栈
在scala中如果一个函数在最后一步调用自己(必须完全调用自己,不能加其他额外运算子),那么在scala中会复用函数栈,这样递归调用就转化成了线性的调用,效率大大的提高.If a function c ...
- linux head、tail、sed、cut、grep、find
head用法: head 参数 文件名 -cn:显示前n个字节 -n:显示前n行 例子:head -c20 1.txt 显示1.txt文件中前20个字符 ls | head -20:显示前20 ...
- linux命令每日一练习-tail
tail 是查看文件的末尾 tail -n 5*** 显示文件×××的最后5行 tail -n +5 ××× 显示文件×××从第5行开始的内容 tail -f *** 监视文件×××的末尾.循环展示
随机推荐
- UVA 11990 `Dynamic'' Inversion CDQ分治, 归并排序, 树状数组, 尺取法, 三偏序统计 难度: 2
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- Unity中UI界面颤抖解决方法
将Render Mode中属性改为Screen Space - Camera 摄像机挂在Canvas属性下会出现UI界面颤抖的效果. UI界面颤抖解决方式:将Render Mode中属性改为Scree ...
- python 最小二乘拟合,反卷积,卡方检验
import numpy as np # from enthought.mayavi import mlab ''' ogrid[-1:5:6j,-1:5:6j] [array([[-1. ], [ ...
- Office 365 企业应用以及服务概览 分享记录
博客地址:http://blog.csdn.net/FoxDave 分享时间: 2017年9月14日 分享地点: 部门内部 参与人数: 16人 分享内容: 讲解微软MVP项目计划的相关内容:讲解O ...
- WebClient和WebRequest获取html代码
HTML: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.as ...
- BSTR 转 char*
#include <comdef.h> #include <comutil.h> #pragma comment(lib,"comsuppw.lib") _ ...
- Android:AndroidManifest.xm中xmlns的作用
有了它,你就可以alt+/作为提示,提示你输入什么,不该输入什么,什么是对的,什么是错的,也可以理解为语法文件.或者语法判断器什么的 这个主要作用是在运行的时候那些控件的属性都是通过它来识别的,如果上 ...
- nginx 隐藏nginx版本号
为什么要隐藏 Nginx 版本号:一般来说,软件的漏洞都与版本有关,隐藏版本号是为了防止恶意用户利用软件漏洞进行攻击 worker_processes 1; events { worker_conne ...
- 【Maven】Project configuration is not up-to-date with pom.xml错误解决方法
导入一个Maven项目之后发现有一个如下的错误: Project configuration is not up-to-date with pom.xml. Run project configura ...
- js- caller、 callee
caller 返回一个对函数的引用,该函数调用了当前函数. functionName.caller functionName对象 是所执行函数的名称. 说明 对于函数来说 ...