实现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 *** 监视文件×××的末尾.循环展示
随机推荐
- bzoj2330
题解: 差分约束系统 要我们求最小值 显然就是转化为最长路 然后spfa一下即可 代码: #include<bits/stdc++.h> using namespace std; ; lo ...
- EF-使用迁移技术让程序自动更新数据库表结构
承接上一篇文章:关于类库中EntityFramework之CodeFirst(代码优先)的操作浅析 本篇讲述的是怎么使用迁移技术让程序自动通过ORM框架将模型实体类结构映射到现有数据库,并新增或修改与 ...
- Android : 代码多维度管理(产品风味) - flavorDimensions & productFlavors
一.关于配置产品风味 Android studio 升级到3.0之后,gradle增加了多维度管理配置,便于同一个项目中创建应用的不同版本,分别管理依赖项并签署配置.创建产品风味与创建构建类型类似:只 ...
- Python3虚拟环境安装:virtualenv、virtualenvwralpper
一:通过pip3(因python2和3共存,前文修改过pip3软连接,pip3可以安装到python3)安装virtualenv,pip3 install virtuale 二:建立虚拟环境文件目录 ...
- ln -s 软连接
创建软连接 ln -s 我们通过实例查看ls的路径发现,在/tmp/目录下的/bin/ls指向的是/usr/bin/ls,所以这里/tmp/bin/ls所存储的就是一个绝对路径,我们可以看做是一个软链 ...
- Grid Layout 注释
.wrapper { display: grid;/*定义一个块级的网格容器*/ grid-template-columns: repeat(3, 1fr); /*表示平均分为3列*/ grid ...
- 实力封装:Unity打包AssetBundle(三)
前情提要:第二种打包方式 窗口初现 通过前面的两篇教程和一篇番外,我们已经完全实现了打包的功能.但是使用起来总是觉得有些晦涩别扭,如果不告诉别人怎么使用,对方肯定是一头雾水. What?你给我的这是啥 ...
- 中文datepicker控件
$(function() { $.datepicker.regional[, isRTL: !, showMonthAfterYear: !, yearSuffix: "年" } ...
- L293 给地球降温
Countries look at ways to tinker with Earth’s thermostat The idea of cooling the climate with strato ...
- Tensorflow函数:tf.zeros
tf.zeros函数 tf.zeros( shape, dtype=tf.float32, name=None ) 定义在:tensorflow/python/ops/array_ops.py. 创建 ...