"fseek"、"lseek"、"seekg"、"seekp"有什么区别?

what's the difference between `fseek`, `lseek`, `seekg`, `seekp`?

本文关键字:什么 区别 seekg fseek lseek seekp      更新时间:2023-10-16

一位面试官问我如何实现tail(是的,就是linux shell中的那个)。我的答案是,首先搜索到文件的末尾,然后逐个向前读取字符,如果遇到n,则意味着一行已满,等等。我想我的答案是正确的。

然后我发现了这个问题,我应该使用哪个搜索来实现tail?我以为我可以简单地使用seekg(C++的东西?),但有人告诉我应该使用lseek(linux系统调用?)。

那么包括fseek(ANSI C的东西?),我应该用哪一个来实现tail?它们之间有什么大的区别吗?

使用C++IOstreams库时使用seekgseekp在这里没有用,因为它设置了put指针。

使用C stdio库时请使用fseek。当使用低级POSIX文件描述符I/O时,请使用lseek

各种查找函数之间的区别只是它们操作的文件/流对象的类型。在Linux上,seekgfseek可能是根据lseek来实现的。