`fseek`,`lseek`,`seekg`,`seekp`之间有什么区别?
面试官问我,我将如何实现tail
(是的,linux shell中的那个)。 我的回答是,首先寻找文件的末尾,然后逐个读取字符,如果遇到\n
,则表示一行已关闭,等等等等。 我认为我的答案是正确的。
然后我发现了这个问题,我应该用它来实现tail
吗? 我以为我可以简单地使用seekg
(C ++的东西?),但有人告诉我应该使用lseek
(linux系统调用?)。
那么包括fseek
(ANSI C的东西?),我应该用它来实现tail
? 他们之间有什么大不同吗?
使用C ++ IOstreams库时使用seekg。 seekp
在这里seekp
,因为它设置了put指针。
使用C stdio库时使用fseek
。 使用低级POSIX文件描述符I / O时使用lseek
。
各种搜索function之间的区别仅在于它们运行的文件/流对象的类型。 在Linux上, seekg
和fseek
可能是用lseek
。