open()関数の結果で正の値に設定されたファイル記述子を持っています。私が実際のファイルを削除すると、fdはまだ正の整数です。私は何らかの理由でファイルを削除すると、このファイル記述子がもう有効ではないことを知ることができます。要するに、fdが示しているファイルが、そこに存在するかどうかを知ることができます。私はFreeBSDのCでこれをやろうとしています。ファイル記述子を使用してファイルがまだ存在するかどうかを確認する方法
答えて
UNIXシステムでは、開いているファイルを削除することができます(または、ファイルシステムからファイルへのすべての参照を削除することができます)。しかし、ファイル記述子はでも有効です。です。読み込みと書き込みの呼び出しは、そこにファイル名が残っているので、成功します。
つまり、ファイルディスクリプタが閉じられるまで、ファイルを完全に削除することはできません。クローズすると、ファイルは自動的に削除されます。
有効なファイル記述子を使用すると、ファイル名がまだ存在するかどうかを確認できます。 buf
はfstat
で初期化struct stat
ある
printf("%d\n", buf.st_nlink); // 0 means no filenames
。
アドバイスありがとうございますが、これは私が直面している別の状況です。 fdがまだそこにあるかどうかを確認する必要があります。 fdを介してそれを学ぶ方法は何ですか? –
@HasanBozok - 有効なファイル記述子で 'fstat'を使用すると、ハードリンクの数を取得できます。 0の場合、ファイル名は削除されています。 – teppic
@teppic、['ioctl'](http://pubs.opengroup.org/onlinepubs/009696699/functions/ioctl.html)を使ってファイルを実際に削除する方法はありますか?それが可能なら、それは危険でしょうか? –
ファイルに書き込む前に、それはまだそこaccess()
あなたはまた、ディスクリプタにfstat情報行うことができ
if (access("/yourfile",W_OK)!=-1) {
//Write on the file
}
使用している場合は、チェックすることができ:
struct stat statbuf;
fstat(fd,&statbuf);
if (statbuf.st_nlink > 0) {
//File still exists
}
をしかし、それはあなたのソフトウェアが遅くなりますいくつかのプログラムは、ファイルを別の場所にリンクして元の名前をリンク解除することができます。その結果、ファイルはまだ存在しますが、別の名前/場所の下にあります。
もっと良い選択肢は、GNU/Linux上でinotify
、またはbsd上でkqueueを使用することですが、私は2番目を使用したことはありません。
これらのAPIを使用して、ディレクトリの変更を監視したり、カーネルから通知を受け取ったり、ファイルが他のプロセスによって削除されたときにイベントを取得したりできます。
このイベントはリアルタイムではありませんので、イベントを取得する前に数ミリ秒間ファイルを使用することができます。
- 1. ファイルが存在するかどうかを確認します
- 2. os.pathを使用してファイルが現在存在するかどうかを確認する方法
- 3. localhostを使用してファイルがphpに存在するかどうかを確認する正しい方法
- 4. Prolog:述語が存在するかどうかを確認する方法は?
- 5. AWS S3:bashを使用してバケット内にファイルが存在するかどうかを確認する方法
- 6. golangを使用してWebファイルが存在するかどうかを確認する方法は?
- 7. ファイルがtypescriptに存在するかどうか確認してください
- 8. ワークシートがExcelファイルに存在するかどうかを確認する方法
- 9. ファイル名が既に存在するかどうかを確認する方法?
- 10. ファイルが存在するかどうかを確認する方法
- 11. ファイル+フォルダツリーが存在するかどうかを確認する方法
- 12. シェルスクリプトにファイルが存在するかどうかを確認する方法
- 13. windowsstore appにファイルが存在するかどうかを確認する方法
- 14. powershellを使用してリモートシステムにファイル/フォルダが存在するかどうか確認してください。
- 15. 他のプロセスがファイル記述子を使用しているかどうかを判断する方法は?
- 16. イメージがまだ存在するかどうかを確認する方法
- 17. ジキールを使用するフォルダにファイルが存在するかどうかを確認する方法は?
- 18. anglefire2を使用してFirebaseに親子関連が存在するかどうかを確認する方法
- 19. CQ 5を使用して子ノードが存在するかどうかを確認する方法クエリービルダー
- 20. if文を使用してxmlファイルに数値が存在するかどうかを確認しますか?
- 21. PHP:ファイルが存在するかどうかを確認しますか?
- 22. 子が存在するかどうかを確認する
- 23. Firebaseリアルタイムデータベース:子値が存在するかどうかを確認する方法
- 24. Powershellはファイルが存在するかどうかを確認します
- 25. Mod_rewriteは、PHPファイルが存在するかどうかを確認します。
- 26. ファイルがアンドロイドリソースに存在するかどうかを確認します - Android
- 27. 電子メールアドレスを使用してPayPalアカウントが存在するかどうかを確認しますか?
- 28. Javascriptを使用してファイルが存在するか確認する方法。JqueryとAjaxがありません。
- 29. ファイルが存在するかどうかを確認する方法(ファイルの種類に関係なく)
- 30. 2つのファイルが存在するかどうかをチェックし、1つだけ存在する場合はどうするかを確認します。 Python 2
ファイルへの書き込みまたは読み取りを試みます。それはエラーを返します。 – RedX
@RedXこれはUNIXの仕組みではありません。 – LtWorf
はい、私はそのファイルを読んだり開いたりする必要があることを知っていますが、fdだけでファイルを開いたり読んだりする方法はありますか? fd、path、またはFILEだけで読み込みまたは開くためのio関数があります。* –