私のアプリケーションはlseek()
、データを書き込むための目的の位置を探すために使用します。ファイルはを使用して正常に開かれ、open()
私のアプリケーションは何度も使用できました。lseek()
write()
ある時点で、一部のユーザーにとっては簡単に再現できない場合は、 lseek()
-9で-1を返しますerrno
。これより前にファイルが閉じられず、ファイルハンドル(int)がリセットされません。
この後、別のファイルが作成されます。open()
再び大丈夫でありlseek()
、write()
再び動作します。
さらに悪いことに、このユーザーは完全なシーケンスを再試行し、すべてが順調でした。
だから私の質問は、OSが何らかの理由でファイルハンドルを閉じることができるかということです。何が原因でしょうか?ある種のファイルインデクサーまたはファイルスキャナー?
これを解決するための最良の方法は何ですか。この擬似コードは最良の解決策ですか?(コードレイアウトを気にせず、そのための関数を作成します)
int fd=open(...);
if (fd>-1) {
long result = lseek(fd,....);
if (result == -1 && errno==9) {
close(fd..); //make sure we try to close nicely
fd=open(...);
result = lseek(fd,....);
}
}
誰かが似たようなことを経験しますか?
概要:ファイルのシークと書き込みは、特定のfdに対して正常に機能し、理由もなく突然errno=9を返します。