其他分享
首页 > 其他分享> > 一个lseek引起的思考

一个lseek引起的思考

作者:互联网

先看一段代码:

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