gpt4 book ai didi

c - 为什么 lseek 允许我设置负文件位置?

转载 作者:太空狗 更新时间:2023-10-29 11:24:04 26 4
gpt4 key购买 nike

man 条目说 lseek 应该返回 -1 如果生成的文件偏移对于常规文件来说是负的。

为什么这样的代码有效?

int fd;
off_t offset;

fd = open("test.txt", O_RDWR);
offset = lseek(fd, -10, SEEK_SET);

printf("%d\n", offset); // prints -10

if (offset == (off_t) -1)
perror("seek"); // error not triggered

我觉得我应该将 offset=-1errno 设置为 EINVAL

这也会导致文件大小显得非常大(接近 unsigned int 的大小)——似乎是一个溢出问题。这是为什么?

最佳答案

我设法重现了您的“错误”行为。您必须包含 unistd.h 以获得正确的原型(prototype)。有了这个包含,lseek 的行为就如描述的那样。

当您错过这个包含时,编译器会传递一个 int -10 而不是 off_t -10 .这会导致您观察到的行为。

更新:

所需包含的完整列表是

  • open(2)

      #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
  • lseek(2)

      #include <sys/types.h>
    #include <unistd.h>
  • printf(3) , perror(3)

      #include <stdio.h>

关于c - 为什么 lseek 允许我设置负文件位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19339110/

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