0

stdinブロックせずにデータを読み取る、またはデータをブロックせずに読み取ることができるかどうかを確認するためのポータブルな方法はありますか?stdinは、端末/キーボード入力だけでなく、別のプロセスからパイプされる可能性があることに注意してください。

stdlib.hまたはstdio.hのANSIC関数のみを使用するのが最善ですが、POSIX関数の使用も非常に移植性があります。

また、これについてはよくわかりませんが、実際にはWindowsでは機能しないと言われているフォーラムの投稿がいくつかあります。select()

4

1 に答える 1

5

select()poll()はPOSIXの方法ですが、非ソケットのWindowsでは機能しません。

WindowsとUnixの両方がターゲットである場合、十分な移植性はありません。さらに、Windowsでは、パイプとコンソールハンドルを別々に処理する必要があります。PeekNamedPipe()パイプの場合PeekConsoleInput()、コンソールの場合(そして、持っていない場合でも後者の場合はかなり複雑になりENABLE_LINE_INPUT、実際のワームの缶になります)。

別のスレッドで入力を行うことは、pthreadとWindowsの違いがあっても、より移植性が高くなります(そして、これらの違いを取り除くためのpthread-for-Win32ライブラリがあります)。

于 2013-01-11T13:57:05.023 に答える