Какая разница между `fseek`,` lseek`, `seekg`,` seekp`?
Меня спросил у интервьюера, как я могу реализовать tail
(да, тот, что в оболочке Linux). Мой ответ был, сначала ищите конец файла, а затем читайте символы один за другим вперед, если встречается с \n
, означает, что одна строка опустилась, бла-бла-бла. Я полагаю, что мой ответ правильный.
Затем я нашел эту проблему, которую я должен использовать для реализации tail
? Я думал, что могу просто использовать seekg
(С++ thing?), Но мне сказали, что я должен использовать lseek
(системный вызов linux?).
Итак, включая fseek
(объект ANSI C?), который я должен использовать для реализации tail
?
И есть ли какая-то большая разница между ними?
Ответы
Ответ 1
Используйте seekg
при использовании библиотеки IOstream С++. seekp
здесь бесполезно, так как он устанавливает указатель put.
Используйте fseek
при использовании библиотеки C stdio. Используйте lseek
при использовании низкоуровневого ввода-вывода дескриптора файла POSIX.
Разница между различными функциями поиска - это просто тип файлов/потоков, на которых они работают. В Linux seekg
и fseek
, вероятно, реализованы в терминах lseek
.