当前位置:  开发笔记 > 编程语言 > 正文

为什么lseek会返回0?

如何解决《为什么lseek会返回0?》经验,为你挑选了1个好方法。

lseek() 应该返回文件描述符的位置.

该文件说:

成功完成后,lseek()将返回从文件开头以字节为单位的结果偏移位置.否则,返回值-1,并设置errno以指示错误.

麻烦的是,这甚至不起作用:

#include 
#include 
#include 
printf("size off_t: %i\n", sizeof(off_t));

off_t pos;
pos = lseek(file, (off_t)0, SEEK_CUR);
printf("pos: %lli\n", pos);

// same result for SEEK_SET and SEEK_END
pos = lseek(file, (off_t)2352, SEEK_CUR);
printf("pos: %lli\n", pos);

这给了我:

size off_t: 8
pos: 0
pos: 0

为什么是这样?是否有使用原始I/O功能查找当前偏移的替代方法?(read,open,lseek,...)

编辑1:

我试图让这个例子更简单.



1> 小智..:

尝试将#include 添加到顶部.

请参阅:http://forums.macosxhints.com/archive/index.php/t-35508.html

基本上,既然你没有#include ,编译器会"猜测" lseek()返回一个int.

可能一个int是4字节长,并且因为PPC是"大端"字节顺序,所以你得到的是"顶部"4个字节,它们都是零.

包含unistd.h让编译器实现lseek()返回off_t,所以你不会丢失一半的字节.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有