cstdioを使用してLinux上にC++アプリケーションを作成しました。これは、デバイス全体をランダムなデータで上書きする必要がある1つの関数を含んでいます。ファイル名が与えられ、ランダムなデータのブロックがメモリに作成され、ファイルにfwrite()を使用して順次書き込まれます。 デバイスがいっぱいの場合は、関数が返されます。別の書き込みエラーがある場合、例外がスローされます。 エラーが発生したときにferror()に尋ね、これが "ディスクがいっぱい"であるかどうかを認識したい - 別のエラーです。 ディスクが一杯になったときにENOSPCを取得する予定です。しかし関数はディスクに書き込みを行い、いっぱいになるとferror()が返す値は1(EPERM)になります。その一方で、 perrorは正しい "No space left on device"を表示します。 これは私のC++ライブラリのバグですか?または、EPERM正しいエラーコードですか? 正しいエラーコードの場合は、ディスクがいっぱいになってこの特定のエラーを認識するのに適したEPERMが返されますか?デバイスにスペースがないときにEPERMを返すのはなぜですか?ENOSPC
1
A
答えて
2
ferror
は、ストリームにエラーがあるかどうかを示します。実際にエラーが何かを確認するには、errno
を調べる必要があります。
perror
は、errno
を調べるため、正しいエラーメッセージが表示されます。
0
これは、カーネルやデバイスドライバのバグである可能性が高い私のC++のlibs
のバグです。しかしどちらもそうは思わない。
1
ferror
はerrno
の値を返さないものとします。ストリームエラーが発生した場合はゼロ以外の値を返します。 errno
を直接調べる必要があります。
1
ferrorは、エラーが発生したことを示しています。書き込みに使用した関数の結果(またはfcloseの結果)をテストした場合、すでに知っているはずのことです。 POSIXでは、これらの関数(fwrite、fputc、fprintf、fclose)がerrnoに問題の値を設定するように指示しています。
0
ext
のファイルシステムの一部がデフォルトでroot
のために予約されている可能性があります。したがって、スペースが残っている可能性がありますが、現在のユーザーは使用できません。
man mke2fs
-m reserved-blocks-percentage
Specify the percentage of the filesystem blocks reserved for the
super-user. This avoids fragmentation, and allows root-owned
daemons, such as syslogd(8), to continue to function correctly
after non-privileged processes are prevented from writing to the
filesystem. The default percentage is 5%.
関連する問題
- 1. TFSビルドサーバーでEPERMを使用してNPMキャッシュをランダムに消去できないのはなぜですか?
- 2. 入力にスペース文字を使用できないのはなぜですか?
- 3. PHPでselfを返すことができないのはなぜですか?
- 4. イメージに余分なスペースがあるのはなぜですか?
- 5. Ada:整数をコンソールに印刷するときに大きなスペースがあるのはなぜですか?
- 6. ダイアログのパディングを(0,0,0,0)に設定するときにスペースが空白になるのはなぜですか?
- 7. 2.3.1プロジェクトを2.2.1デバイスにインストールできないのはなぜですか?
- 8. 毎回Bluetooth LEデバイスをペアにしないとメッセージを送信できないのはなぜですか? (UWP)
- 9. なぜ矢印関数を返すことができないのですか?
- 10. なぜ代入文を返すことができないのですか
- 11. グリッドに十分なスペースが与えられていないとクリップするのはなぜですか?
- 12. "None"が関数に返されないときにPythonが失敗するのはなぜですか?
- 13. なぜLinux上のマウントされていないデバイスに書き込むことができますか?
- 14. なぜ、pam_loginuidモジュールが-EPERMを使って/ proc/self/loginuidへの書き込みに失敗するのですか?
- 15. ツールバーにスペースがあるのはなぜですか?
- 16. AlarmManagerがデバイス上で正確に繰り返されないのはなぜですか?
- 17. コードをコンパイルするときにSwiftがスペースを削除できないのはなぜですか?コードをコンパイルするときスウィフトは、次のようにスペースを削除しませんなぜJavaやC++に比べて、スウィフトに
- 18. なぜwhitespaceAndNewlineCharacterSetはスペースを削除しないのですか?
- 19. なぜコンパイラはEnvironment.Exitが返すことができると思いますか?
- 20. .reduce()関数でアキュムレータにプッシュした結果を返すことができないのはなぜですか?
- 21. ListViewがスクロールしているときにカスタムSimpleCursorAdapterが異なる結果を返すのはなぜですか?
- 22. smtp.gmail.comが認識できないコマンドを返すのはなぜですか?
- 23. 文字列の最後に達したときにstrtok()がfalseを返さないのはなぜですか?
- 24. Logitechデバイスに画像が表示されないのはなぜですか?
- 25. Zaberデバイスがdevディレクトリに表示されないのはなぜですか?
- 26. デバイスにテーブルが表示されないのはなぜですか?
- 27. アイコンがデバイスに配信されないのはなぜですか?
- 28. DataGridViewRow.Cells [1] .Valueがnullでないときにnullを返すのはなぜですか?
- 29. デコレータで関数を返すときに引数がないのはなぜですか?
- 30. メインクラス以外でデバイスIDを取得できないのはなぜですか?