ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

一个lseek引起的思考

2021-04-16 23:01:49  阅读:239  来源: 互联网

标签:lseek int 引起 ret read fd 思考 SEEK buff


先看一段代码:

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 = sleek(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

语言都是通过一些指定的逻辑去实现功能

标签:lseek,int,引起,ret,read,fd,思考,SEEK,buff
来源: https://www.cnblogs.com/real-watson/p/14669063.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有