4

MSVC (VS 2013) をデバッグ モードで使用して、クロスプラットフォーム C ライブラリ (Linux で正常に動作し、Windows で動作していた) をコンパイルしています。readC 標準ライブラリから呼び出すと、例外が発生することがあります。

無効なパラメータを致命的と見なす関数に、無効なパラメータが渡されました。

パラメータ (ファイル記述子、バッファ、長さ) は問題ないと思います。ファイル記述子が有効でない場合でも、-1 が返されると思います。コード (これは私自身のものではなく、クロスプラットフォームであり、Linux で正常に動作します) は、戻り値が -1 であるかどうかを実際にチェックし、それに応じて動作します。

MSDN は非常に役に立たず、次のように述べています。

読んだ

この POSIX 関数は非推奨です。代わりにISO C++ 準拠の _ readを使用してください。

しかし、試してみて に置き換えただけread_read、完全に機能します。

  • readとの違いは何_readですか? read文書化されていないので、私はそれを調べることはできません。同じように見えますが、例外も発生します。

  • 「非推奨の POSIX 関数」と「ISO C++ 準拠」* のものを混在させることはできますか? たとえば「open」と「_read」?うまくいきそうです

  • #define read _readLinux と同じように動作することを期待できますか?


*) ドキュメントの言語にもかかわらず、プロジェクトは C++ ではなくプレーンな C であることに注意してください。MSVC は、実際には C または C++ ではなく、ある意味では C/C++ であるという点で奇妙です。また、例外が発生するという事実は、私が C++ を使用しているという意味ではなく、C の非標準 Windows 拡張である IIRC です。

4

1 に答える 1