gpt4 book ai didi

c - 为什么 fseeko() 会失败并显示 EINVAL?

转载 作者:行者123 更新时间:2023-11-30 15:25:16 27 4
gpt4 key购买 nike

我需要将 LFS 添加到使用 fseek() 的 C 进程中。gcc和glibc的版本分别是3.2.3和2.5。

我做了以下修改:

  1. 已添加CFLAGS += -D_FILE_OFFSET_BITS=64到 makefile。
  2. 我将调用改为 fseek()调用fseeko() (我还需要 MSVC6 支持,但一次一步)。
  3. 我已将第二个参数的类型更改为 off_tsizeof()变量返回 8。

这是一个很好的示例 main()因为我可以通过我们的 DLP 及其输出:

fd = fopen("large_file", "rb");
off_t offset = 1ULL << 32;
rc = fseeko(fd, offset, SEEK_SET);

rc = -1 sizeof(offset)=8 errno=22 offset=2147483648

最佳答案

1 << 32在你的例子中是未定义的行为。它很可能返回 0 或 1。请确保在移位之前将 1 转换为合适的类型。如果unsigned long也是 32 位,那么 1UL << 32同样是错误的。

避免-D_LARGEFILE64_SOURCEoff64_t ,因为它们只会让事情变得更加复杂。相反,仅使用 -D_FILE_OFFSET_BITS=64并使用off_t那么应该是 64 位。

关于c - 为什么 fseeko() 会失败并显示 EINVAL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28009799/

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