C 如何读取并记住文件的最后偏移量?

C 如何读取并记住文件的最后偏移量?,c,file-descriptor,C,File Descriptor,读取函数如何知道要从文件中读取的下一个位置。 或者,我该如何制作一个函数,即使在打开另一个文件并更改其文件描述符后,也能记住文件的最后偏移量。 有没有办法知道文件描述符已经打开并指向文件 像这样: int main() { int fd; char *file; file = (char *)malloc(sizeof(char) * 32); fd = open("file.txt", O_RDONLY); read_file(fd, *file); /* reading

读取函数如何知道要从文件中读取的下一个位置。 或者,我该如何制作一个函数,即使在打开另一个文件并更改其文件描述符后,也能记住文件的最后偏移量。 有没有办法知道文件描述符已经打开并指向文件

像这样:

int main()
{
  int fd;
  char *file;

  file = (char *)malloc(sizeof(char) * 32);
  fd = open("file.txt", O_RDONLY);
  read_file(fd, *file); /* reading the first line from file.txt */

  fd = open("file1.txt", O_RDONLY);
  read_file(fd, *file); /* reading the first line from file1.txt */

  fd = open("file.txt", O_RDONLY);
  read_file(fd, *file); /* Now it should read the second line from file file.txt, how can I manage to do that*/

  close(fd);
  return (0);
}

文件中的当前位置由内核维护,我认为,文件描述符充当与打开的文件相关联的所有信息的键

如果需要同时打开和读取两个文件,它们当然不应该共享文件描述符。只需使用两个,每个文件一个

const int fd1 = open("file.txt", O_RDONLY);
const int fd2 = open("file1.txt", O_RDONLY);
在代码中处理
char*file
毫无意义,但此时您可以混合访问
fd1
fd2

完成后,请记住关闭文件:

close(fd2);
close(fd1);
当然,在实际代码中,在尝试从文件执行I/O之前,您还将检查打开的调用是否成功

有没有办法知道文件描述符已经打开并且 指向文件

如果您能成功地
lseek(fd,0,SEEK_CUR)
,这意味着
fd
已打开并可查找(因此可能是一个文件,但请记住,“文件”包括目录和设备文件以及常规文件)


如果返回
(off_t)-1
errno==EBADF
,则描述符未打开;如果返回
(off\u t)-1
errno==ESPIPE
,则它是一个管道、套接字或FIFO。

从第一个文件打开到第一个文件仍然保持打开状态…如果确实需要这样做,可以使用检索当前文件位置,当然您也可以使用
lseek
在新打开的文件上查找该位置。提前感谢您的回答!!但我的问题是,我们如何才能记住文件的最后偏移量,以便继续阅读我们离开的地方;你的要求毫无意义,因为有更好的方法。