来自' FILE * {aka _IO_FILE *}'的转换无效到' int'

时间:2014-04-16 16:22:47

标签: c++ linux file lseek

当试图编译这个小例子时......

#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-page for lseek(3)

  

概要
  off_t lseek(int fildes ,off_t offset ,int whence );

     

描述
  lseek()函数应设置与文件描述符 fildes 关联的打开文件描述的文件偏移量,如下所示:

     

[........]

我将此解释为第一个参数应该是文件描述符,在本例中是 foo

问:这里有什么问题?

1 个答案:

答案 0 :(得分:2)

如果您想在文件中搜索,请使用fseek。我从来没有见过lseek用这种方式

更多信息:what's the difference between `fseek`, `lseek`, `seekg`, `seekp`?