我对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 }
在 line number17
上,我使用 flag O_APPEND
,因此 prwtest 的当前文件偏移量取自 i-node 的当前文件大小。(现在是 26 岁)。
在行号18
上,我使用lseek()
SEEK_CUR 使用的行号,偏移量为 0。
但是结果值为cur_offset
0。(我假设它必须是 26,因为 SEEK_CUR 表示当前文件偏移量。)但是,SEEK_END
给了我我的想法,cur_offset
是 26。
为什么lseek(fd, 0, SEEK_CUR);
给我返回值 0,而不是 26?