gpt4 book ai didi

api - 为什么 lseek 返回 0?

转载 作者:行者123 更新时间:2023-12-01 08:08:41 25 4
gpt4 key购买 nike

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

documentation说:

Upon successful completion, lseek() returns the resulting offset location as measured in bytes from the beginning of the file. Otherwise, a value of -1 is returned and errno is set to indicate the error.



问题是,即使这样也行不通:
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
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);

这给了我:

大小 off_t: 8
位置:0
位置:0

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

编辑 1:

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

最佳答案

尝试将 #include 添加到顶部。

见: http://forums.macosxhints.com/archive/index.php/t-35508.html

基本上,因为你没有 #include <unistd.h> ,编译器在“猜测” lseek()返回一个整数。

int 可能有 4 个字节长,并且由于 PPC 是“大端”字节顺序,因此您将获得“顶部”4 个字节,它们都为零。

包含 unistd.h 让编译器意识到 lseek()正在返回 off_t ,因此您不会丢失一半的字节。

关于api - 为什么 lseek 返回 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/587254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com