Linux signal()做什么?

Linux signal()做什么?,linux,networking,signals,Linux,Networking,Signals,“signal()将信号signum的配置设置为处理程序,该处理程序 是否定义了SIG_IGN、SIG_DFL或程序员的地址 函数(“信号处理器”)。” 我发现对它的功能的描述很模糊(对于网络和linux编程来说是新的)。这是某种回调设置函数吗?现在,我的代码(我还没有编译)正在像这样使用它: signal( SIGIO, readMessage ); 其中readMessage是一个函数。SIGIO的定义如下: SIGPOLL是异步I/O事件发生时发送给进程的信号 发生 所以把这些放在一起,

“signal()将信号signum的配置设置为处理程序,该处理程序 是否定义了SIG_IGN、SIG_DFL或程序员的地址 函数(“信号处理器”)。”

我发现对它的功能的描述很模糊(对于网络和linux编程来说是新的)。这是某种回调设置函数吗?现在,我的代码(我还没有编译)正在像这样使用它:

signal( SIGIO, readMessage );
其中readMessage是一个函数。SIGIO的定义如下:

SIGPOLL是异步I/O事件发生时发送给进程的信号 发生

所以把这些放在一起,我只能猜测当某个异步I/O事件发生时,会调用函数readMessage(int)?这像Qt中的插槽/信号吗


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

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

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


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

您可能希望从
aio.h
标题中查看
aio
函数,例如
aio\u读取
aio\u写入
和其他。