При попытке скомпилировать этот маленький пример …
#include <iostream>
#include <stdio.h>
#include <unistd.h>
int main(void) {
FILE *foo;
foo = fopen("bar.txt", "rt");
lseek(foo, 5, SEEK_CUR); // This line is getting compiler error
fclose(foo);
return 0;
}
…Я получаю сообщение об ошибке компилятора относительно вызова lseek()
, Выход:
main.cpp|8|error: invalid conversion from ‘FILE* {aka _IO_FILE*}’ to ‘int’ [-fpermissive]|
unistd.h|334|error: initializing argument 1 of ‘__off_t lseek(int, __off_t, int)’ [-fpermissive]|
Для записи: я также пытался использовать оба lseek(*foo, 5, SEEK_CUR);
а также lseek(&foo, 5, SEEK_CUR);
, но это только усугубляет ситуацию. (Я действительно не ожидал, что это что-то решит.)
Ссылаясь на man-страница для lseek (3):
конспект
off_t lseek (int Филдс, off_t смещение, ИНТ откуда);Описание
[……..]
Функция lseek () устанавливает смещение файла для описания открытого файла, связанного с дескриптором файла Филдс, следующее:
Я понимаю, что это означает, что первый аргумент должен быть дескриптор файла, который в этом случае Foo.
Q: что здесь не так?
Если вы хотите искать в файле, используйте FSEEK. Я никогда не видел, чтобы lseek использовал этот способ
Больше информации: в чем разница между `fseek`,` lseek`, `seekg`,` seekp`?
Других решений пока нет …