1
//open file
if((fd = open("test.txt", O_RDWR | O_APPEND)) == -1)
  printf("open failed\n");

//set offset
if(lseek(fd, -8, SEEK_CUR) == -1)
  printf("cannot seek\n");

それからそれは「求めることができない」と印刷します、これが理由ですか?
strerrno(errno)の後、「無効な引数」が表示
されます。問題が見つかりました。SEEK_CURは開始位置にあります。
しかし、なぜ?追加モードを使用します。

4

1 に答える 1

3

シーク時の現在の位置が少なくとも 8 であることを確認すると、うまくいきます。

lseek(fd, -8, SEEK_CUR)

ファイルの開始前に位置を設定しようとしません。

ファイルlseekの位置を負のオフセットに設定errnoすると、 に設定され、観察したように としてEINVAL報告されます。Invalid argument

現在のファイル位置をファイルの先頭に設定することに注意してくださいopen(少なくとも私のglibcopenはそうします)。そのためlseek(fd,-8,SEEK_END)、末尾から8バイトの位置を設定する場合は必要です。しかし、もちろん、ファイルが 8 バイトより小さい場合は失敗します。

于 2012-07-10T13:45:38.843 に答える