gpt4 book ai didi

c - lseek() 的返回值

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:43 25 4
gpt4 key购买 nike

我对 lseek() 的返回值(这是新的文件偏移量)感到困惑

我有文本文件(它的名字是 prwtest)。它的内容被写入 a 到 z。

然后,我写的代码如下,

  1 #include <unistd.h>
2 #include <fcntl.h>
3 #include <stdlib.h>
4 #include <stdio.h>
5 #include <string.h>
6
7 #define BUF 50
8
9 int main(void)
10 {
11 char buf1[]="abcdefghijklmnopqrstuvwxyz";
12 char buf2[BUF];
13 int fd;
14 int read_cnt;
15 off_t cur_offset;
16
17 fd=openat(AT_FDCWD, "prwtest", O_CREAT | O_RDWR | O_APPEND);
18 cur_offset=lseek(fd, 0, SEEK_CUR);
19 //pwrite(fd, buf1, strlen(buf1), 0);
20 //write(fd, buf1, strlen(buf1));
21 //cur_offset=lseek(fd, 0, SEEK_END);
22
23 printf("current offset of file prwtest: %d \n", cur_offset);
24
25 exit(0);
26 }

在行号 17 上,我使用了标志 O_APPEND,因此 prwtest 的当前文件偏移量取自 i-node 的当前文件大小。 (它是 26)。

在行号18上,我使用了SEEK_CUR使用的lseek(),偏移量为0。

但是结果值cur_offset是0。(我假设它一定是26,因为SEEK_CUR表示当前文件偏移量。)然而,SEEK_END 给了我我的想法,cur_offset 是 26。

为什么 lseek(fd, 0, SEEK_CUR); 给我返回值 0,而不是 26?

最佳答案

O_APPEND在每次写入文件之前生效,而不是在打开文件时生效。

因此,在开仓之后,仓位仍然是 0但是如果你调用写入,lseekSEEK_CUR将返回正确的值。

关于c - lseek() 的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35695471/

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