1
//open file
if((fd = open("test.txt", O_RDWR | O_APPEND)) == -1)
  printf("open failed\n");

//set offset
if(lseek(fd, -8, SEEK_CUR) == -1)
  printf("cannot seek\n");

然后它打印“cannot seek”,这是为什么?
在 strerrno(errno) 之后,它显示“无效参数”
现在我发现问题了,SEEK_CUR 位于起始位置。
但为什么?我使用附加模式。

4

1 回答 1

3

当我确保搜索时的当前位置至少为 8 时,它对我有用,因此

lseek(fd, -8, SEEK_CUR)

不会尝试在文件开始之前设置位置。

如果lseek将文件位置设置为负偏移量,则设置errnoEINVAL,报告为Invalid argument,就像您观察到的那样。

请注意,open将当前文件位置设置为文件的开头(至少我的 glibc 是open这样),因此lseek(fd,-8,SEEK_END)如果您想将位置设置为距离末尾 8 个字节,则需要这样做。但当然,如果文件小于 8 个字节,这仍然会失败。

于 2012-07-10T13:45:38.843 回答