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 }
number 行17
で flag を使用O_APPEND
しているため、prwtest の現在のファイル オフセットは i ノードの現在のファイル サイズから取得されます。(26歳です)。
行番号18
でlseek()
は、SEEK_CUR で使用されるものを使用し、オフセットは 0 です。
しかし、結果の値cur_offset
は 0 です (SEEK_CUR は現在のファイル オフセットを示しているため、26 である必要があるSEEK_END
と思います) cur_offset
。
lseek(fd, 0, SEEK_CUR);
戻り値が 26 ではなく 0 になるのはなぜですか?