Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C信号。信号()与信号集()?_C_Unix_Signals_Posix_Ipc - Fatal编程技术网

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

C信号。信号()与信号集()?,c,unix,signals,posix,ipc,C,Unix,Signals,Posix,Ipc,所以我目前正在研究POSIX线程和信号在C中的编程。 我的讲师使用 sigset(int sigNumber, void* signalHandlerFUnction) 因为他的笔记不是世界上最好的,所以我不得不自己做一些研究,发现了一篇解释信号的好文章,但作者使用的是signal()方法,它接受相同类型的参数,sigNumber和指向信号处理函数的指针 从我所看到的,两种方法都接受相同的参数,并且基本上产生相同的结果。 我读到signal()很旧,不便于携带,因此sigaction()更好。

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

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

从我所看到的,两种方法都接受相同的参数,并且基本上产生相同的结果。
我读到signal()很旧,不便于携带,因此sigaction()更好。但实际的区别是什么呢?

信号用于安装信号处理程序或忽略信号。sigaction是一个Posix函数,可以忽略信号或安装信号处理程序。sigaction采用信号屏蔽,因此它可以对多个信号进行操作,而signal设计用于为一个信号安装信号处理程序

见上一篇帖子:


sigset由基于System V的Unix操作系统使用。

信号用于安装信号处理程序或忽略信号。sigaction是一个Posix函数,可以忽略信号或安装信号处理程序。sigaction采用信号屏蔽,因此它可以对多个信号进行操作,而signal设计用于为一个信号安装信号处理程序

见上一篇帖子:

sigset由基于SystemV的Unix操作系统使用。

函数(及其相关函数),所有函数都建立或删除信号处理程序

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

sigset
系列是POSIX的一部分,但现在已标记为过时。这些功能从未在跨平台上可靠可用,也没有解决
信号
的所有规格不足问题。不要使用它们

sigaction
在POSIX.1中,提供了比任何其他选项都多的功能,并且它的行为被很好地指定,包括所有的角落案例。如果可能的话,应该使用它。因为它不在ISO C中,而是在POSIX.1-2001中,所以首先,除了Windows之外,您可以在任何地方使用它。然而,信号处理器根本不应该在Windows上使用,因为它们不是系统原语,也不能可靠地工作;我的理解是,一个人应该使用和取而代之,这取决于他试图做什么

您的讲师专门教授POSIX系统编程,因此他们应该更新示例代码和讲座,以便仅参考
sigaction
。它们确实应该涵盖,以及。

函数(及其相关函数),以及所有建立或删除信号处理程序的函数

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

sigset
系列是POSIX的一部分,但现在已标记为过时。这些功能从未在跨平台上可靠可用,也没有解决
信号
的所有规格不足问题。不要使用它们

sigaction
在POSIX.1中,提供了比任何其他选项都多的功能,并且它的行为被很好地指定,包括所有的角落案例。如果可能的话,应该使用它。因为它不在ISO C中,而是在POSIX.1-2001中,所以首先,除了Windows之外,您可以在任何地方使用它。然而,信号处理器根本不应该在Windows上使用,因为它们不是系统原语,也不能可靠地工作;我的理解是,一个人应该使用和取而代之,这取决于他试图做什么


您的讲师专门教授POSIX系统编程,因此他们应该更新示例代码和讲座,以便仅参考
sigaction
。它们真的应该包括,而且也应该包括。

仔细阅读。事实上,这是更好的选择。谷歌在网站上给出了这个答案,并且有很多参考资料需要跟进。作为一名学生,准备好做你自己的研究,不要把所有的东西都放在盘子里。函数族被POSIX标记为过时。您应该使用@WeatherVane感谢您提供的链接:D,但没有必要投反对票:/抱歉,这是您的话,我必须自己做一些研究,好像您认为您不应该这样做。请仔细阅读。事实上,这是更好的选择。谷歌在网站上给出了这个答案,并且有很多参考资料需要跟进。作为一名学生,准备好做你自己的研究,不要把所有的东西都放在盘子里。函数族被POSIX标记为过时。您应该使用@WeatherVane感谢您的链接:D,但没有必要投反对票:/抱歉,是您的话,我必须自己做一些研究,好像您认为您不应该这样做。