signal()有什么作用?

时间:2012-09-30 03:41:21

标签: linux networking signals

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事件?这是一个返回的接受电话吗?

1 个答案:

答案 0 :(得分:0)

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

它们在基于事件的系统中比在Qt中的信号/时隙更相似。在Qt中,组件可以发出信号,可以由其他组件中的多个插槽接收,程序设置信号和插槽之间的连接。在其他系统(Xlib,Win32)中,程序从系统接收预定的事件。 / p>

* nix支持阻塞和非阻塞套接字。 poll()select()系统调用允许程序等待I / O事件。作为poll() / select()的替代方案,当发生I / O事件时,也可以使BSD和Linux发送信号(默认为SIGIO),从而实现异步I / O的形式。可以在fcntl()的联系人页面中找到更多信息,查找F_SETFLF_SETOWNF_SETSIG