gpt4 book ai didi

C 信号。信号()与信号集()?

转载 作者:太空宇宙 更新时间:2023-11-04 05:56:24 30 4
gpt4 key购买 nike

所以我目前正在研究 C 中的 POSIX 线程和信号编程。我的讲师使用

sigset(int sigNumber, void* signalHandlerFUnction)

因为他的笔记不是世界上最好的,我不得不自己做一些研究,发现一篇解释信号的好文章,但是作者使用的是signal()方法,它接受相同类型的参数,即 sigNumber 和指向信号处理函数的指针。

据我所知,这两种方法都接受相同的参数并且基本上产生相同的结果。我读到 signal() 很旧且不可移植,所以 sigaction() 更好。但实际区别是什么?

最佳答案

函数signal , sigset (及其亲属)和sigaction所有建立或删除信号处理程序。

signal 是 ISO C 指定的这些函数中的唯一一个,因此是最可移植的,但它也是最受限制的,并且其行为的关键方面未指定(例如,是否它建立中断阻塞系统调用的信号。

sigset 系列是 POSIX 的一部分,但现在已过时。这些功能从来没有可靠地跨平台使用,也没有解决 signal 的所有规范不足问题。不要使用它们。

sigaction 在 POSIX.1 中,提供了比任何其他选项都多的功能,并且它的行为是明确指定的,包括所有极端情况。如果可能的话,应该使用它。由于它不在 ISO C 中,而是在 POSIX.1-2001 中,因此首先您可以在任何地方使用它,但 Windows 除外。然而,信号处理程序不应该在 Windows 上使用根本,因为它们不是那里的系统原语并且不能可靠地工作;我的理解是应该使用 structured exception handlingasynchronous procedure calls相反,取决于一个人正在尝试做什么。

您的讲师正在专门教授 POSIX 系统编程,因此他们应该更新他们的示例代码和讲座以仅引用 sigaction。他们真的应该涵盖sigprocmask , sigtimedwait , 和 pselect

关于C 信号。信号()与信号集()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26763021/

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