gpt4 book ai didi

linux - signal() 有什么作用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:12 25 4
gpt4 key购买 nike

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

"signal() sets the disposition of the signal signum to handler, which is either SIG_IGN, SIG_DFL, or the address of a programmer-defined function (a "signal handler")."

我发现它所做的描述含糊不清(网络和 Linux 编程的新手)。这是某种回调设置功能吗?现在我的代码(我还没有编译)正在使用它:

signal( SIGIO, readMessage );

其中 readMessage 是一个函数。 SIGIO 定义为:

SIGPOLL is the signal sent to a process when an asynchronous I/O event occurs.

所以综上所述,我只能猜测当某个异步 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_SETFLF_SETOWNF_SETSIG

关于linux - signal() 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12658440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com