关于lseek函数无法光标前移问题

关于lseek函数无法光标前移问题


一、来源

来源于某个人问我,为什么用lseek移动光标后读不到数据。

代码如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(){

        int fd;
        char buf[] = "WO KAO AAAA";

        char readbuf[128] = {0};
        fd = open("./kao.txt",O_RDWR);
        if(fd == -1){
                perror("no exist");
                fd = open("./kao.txt",O_RDWR|O_CREAT,0600);
                if(fd == -1)
                        perror("creat");
                else
                        printf("success\n");
        }

        int nwrite = write(fd ,buf ,strlen(buf));
        if(nwrite != -1)
        {
                printf("write:%d\n",nwrite);
        }

        lseek(fd,-1*nwrite,SEEK_END);

        int nread = read(fd,readbuf,100);
        if(nread != -1)
        {
                printf("read:%d,context:%s\n",nread,readbuf);
        }
        close(fd);
        return 0;
}

这是他的代码,我试了一下确实不行.
各个值都正常,就是到read的时候一直是零,猜测是因为光标移动到了文件的末尾,因此导致无法读出数据到readbuf里。

二、研究结果

是因为他少了unistd.h这个头文件.
我在查lseek的手册的时候发现的。
里的东西

结论:
加上这个头文件:

#include <unistd.h>

总结

因为少头文件unistd.h导致光标无法前移确实是很神奇的,使用ubuntu12编译的时候并没有报错。
不知道其他版本的Linux环境是否也是一样。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值