MSVC (VS 2013) をデバッグ モードで使用して、クロスプラットフォーム C ライブラリ (Linux で正常に動作し、Windows で動作していた) をコンパイルしています。read
C 標準ライブラリから呼び出すと、例外が発生することがあります。
無効なパラメータを致命的と見なす関数に、無効なパラメータが渡されました。
パラメータ (ファイル記述子、バッファ、長さ) は問題ないと思います。ファイル記述子が有効でない場合でも、-1 が返されると思います。コード (これは私自身のものではなく、クロスプラットフォームであり、Linux で正常に動作します) は、戻り値が -1 であるかどうかを実際にチェックし、それに応じて動作します。
MSDN は非常に役に立たず、次のように述べています。
この POSIX 関数は非推奨です。代わりにISO C++ 準拠の _ readを使用してください。
しかし、試してみて に置き換えただけread
で_read
、完全に機能します。
read
との違いは何_read
ですか?read
文書化されていないので、私はそれを調べることはできません。同じように見えますが、例外も発生します。「非推奨の POSIX 関数」と「ISO C++ 準拠」* のものを混在させることはできますか? たとえば「open」と「_read」?うまくいきそうです
#define read _read
Linux と同じように動作することを期待できますか?
*) ドキュメントの言語にもかかわらず、プロジェクトは C++ ではなくプレーンな C であることに注意してください。MSVC は、実際には C または C++ ではなく、ある意味では C/C++ であるという点で奇妙です。また、例外が発生するという事実は、私が C++ を使用しているという意味ではなく、C の非標準 Windows 拡張である IIRC です。