Неверное преобразование из 'FILE* {aka _IO_FILE*}' в 'int'
При попытке скомпилировать этот маленький пример...
#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 fildes, off_t offset, int fromce);Описание
Функция lseek() устанавливает смещение файла для описания открытого файла, связанного сfildes дескриптора файла, следующим образом:[........]
Я понимаю, что это означает, что первым аргументом должен быть дескриптор файла, в данном случае это foo.
Q: что здесь не так?
1 ответ
Если вы хотите искать в файле, используйте fseek. Я никогда не видел, чтобы lseek использовал этот способ
Более подробная информация: в чем разница между `fseek`, `lseek`, `seekg`, `seekp`?