0

この小さな例をコンパイルしようとすると...

#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);ましたが、それは事態を悪化させるだけです。(私は本当にそれが何かを解決するとは思っていませんでした。)

lseek(3) のマンページを参照:

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

説明lseek() 関数は、次のように
、ファイル記述子fildesに関連付けられたオープン ファイル記述のファイル オフセットを設定します。

[…………]

これは、最初の引数がファイル記述子(この場合はfoo ) であることを意味すると解釈します。

Q: ここで何が問題なのですか?

4

1 に答える 1

2

ファイル内をシークする場合は、fseekを使用します。lseek がこのように使われているのを見たことがない

詳細: `fseek`、`lseek`、`seekg`、`seekp` の違いは何ですか?

于 2014-04-16T16:27:02.460 に答える