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 中的插槽/信号吗?

我的另一个问题是,在网络编程的上下文中,究竟什么是 I/O 事件?它是一个返回的接受调用吗?

4

1 回答 1

0

在 *nix 上,信号是从内核到用户空间的回调。它们有点类似于中断,可以认为是从硬件到操作系统的回调。

与 Qt 中的信号/槽相比,它们在基于事件的系统中更像是事件。在Qt中,一个组件可以发出信号,这些信号可以被其他组件中的几个槽接收,程序设置信号和槽之间的连接,在其他系统(Xlib,Win32)中,程序从系统接收预定的事件。

*nix 支持阻塞和非阻塞套接字。和系统调用允许程序等待 I/O 事件poll()select()作为poll()/的替代方案select(),BSD 和 Linux 也可以在 I/O 事件发生时发送信号(默认为 SIGIO),实现异步 I/O 的一种形式。更多信息可以在 manpage 中找到fcntl(),寻找F_SETFL, F_SETOWN, F_SETSIG

于 2012-09-30T11:16:11.003 回答