先看一段代码:
int find_value(int fd) { int ret; char buff[8] = ""; struct timeval st,ed; long long delta; gettimeofday(&st,NULL); ret = read(fd,buff,sizeof(buff)); if (-1 == ret){ printf("failed to read buff\n"); return -1; } gettimeofday(&ed,NULL); delta = ed.tv_usec - st.tv_usec; printf("delta read is %llu\n",delta); return ret; }
在一个文件中,fd作为文件描述符号,从头开始read数据,循环find_value(int fd)时,下一次到达则不是从头开始read数据。
int fd; fd = open("/tmp/log",O_RDONLY);
if (-1 == fd)
perror("Error in opening file\n");
通过发现一个sleek的函数,具体使用说明如下:
#include<unistd.h> #include<sys/types.h> off_t lseek(int fd, off_t offset, int whence) whence: a. SEEK_SET b. SEEK_CUR c. SEEK_END
可以做成以下的利用:
while(1) { ret = lseek(fd,0,SEEK_SET);//turn to the head of file each time if (-1 == ret) perror("Error in sleeking the start\n"); find_value(fd); }
tips:
作为一点简单的编程思考,虽然这是一个简单的问题,细节决定成败,思维与严谨不能分开。
瞎写代码没用,真正从审视的角度和斟酌的思维去编写代码,得到的效果往往很不一样。
特别一些返回值,有时候可以debug出更多的细节。
off_t t 其实如同 int t
typedef off_t int
语言都是通过一些指定的逻辑去实现功能
Life is mess, don't let mess mess us.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了