C语言 如何读取记住文件的最后一个偏移量?



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

喜欢这个:

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是没有意义的,但是此时您可以将对fd1fd2的访问混合在一起。

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

close(fd2);
close(fd1);

当然,在实际代码中,您还需要检查打开调用是否成功,然后再尝试从文件执行 I/O。

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

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

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

最新更新