Неверное преобразование из '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`?

Другие вопросы по тегам