先看一段代码:
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.