1

http://linux.die.net/man/2/signal

「signal()は、シグナルシグナムの処理をハンドラーに設定します。ハンドラーは、SIG_IGN、SIG_DFL、またはプログラマー定義関数(「シグナルハンドラー」)のアドレスのいずれかです。」

私はそれが曖昧であるために何をするかについての説明を見つけます(ネットワークとLinuxプログラミングに新しい)。これはある種のコールバック設定関数ですか?現在、私のコード(まだコンパイルしていません)は次のように使用しています:

signal( SIGIO, readMessage );

readMessageは関数です。SIGIOは次のように定義されます。

SIGPOLLは、非同期I/Oイベントが発生したときにプロセスに送信される信号です。

したがって、これをすべてまとめると、非同期I / Oイベントが発生すると、関数readMessage(int)が呼び出されると推測できますか?これはQtのスロット/信号のようなものですか?

私が持っているもう1つの質問は、ネットワークプログラミングのコンテキストでI / Oイベントと正確に見なされるものは何ですか?戻るのはaccept呼び出しですか?

4

1 に答える 1

0

* nixでは、シグナルはカーネルからユーザースペースへのコールバックです。これらは、ハードウェアからオペレーティングシステムへのコールバックと考えることができる割り込みにいくぶん似ています。

これらは、Qtのシグナル/スロットよりもイベントベースのシステムのイベントに似ています。Qtでは、コンポーネントは他のコンポーネントの複数のスロットで受信できる信号を送信でき、プログラムは信号とスロット間の接続を設定します。他のシステム(Xlib、Win32)では、プログラムはシステムから所定のイベントを受信します。

* nixは、ブロッキングソケットと非ブロッキングソケットをサポートしています。およびシステムコールにより、プログラムはI/Oイベントを待機できますpoll()。/select()の代わりに、BSDおよびLinuxは、I / Oイベントが発生したときに信号(デフォルトではSIGIO)を送信して、非同期I/Oの形式を実現することもできます。詳細については、、のマンページを参照してください。poll()select()fcntl()F_SETFLF_SETOWNF_SETSIG

于 2012-09-30T11:16:11.003 に答える