簡體   English   中英

`signal()`是Linux上的系統調用函數嗎?

[英]Is `signal()` a system call function on Linux?

來自signal() manpage signal() http://man7.org/linux/man-pages/man2/signal.2.html

NAME頂部

  signal - ANSI C signal handling 

大綱頂部

  #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); 

Linux上的情況如下:

  * The kernel's signal() system call provides System V semantics. * By default, in glibc 2 and later, the signal() wrapper function does not invoke the kernel system call. Instead, it calls sigaction(2) using flags that supply BSD semantics. This default behavior is provided as long as a suitable feature test macro is defined: _BSD_SOURCE on glibc 2.19 and earlier or _DEFAULT_SOURCE in glibc 2.19 and later. (By default, these macros are defined; see feature_test_macros(7) for details.) If such a feature test macro is not defined, then signal() provides System V semantics. 

引用在我看來, signal()不是系統調用,而是基於系統調用sigaction()實現的包裝函數,除了“內核的signal()系統調用”。

那么signal()是否是Linux上的系統調用函數?

syscalls的聯機幫助頁指示包裝器間接是常見的,並且包含一個包含signal(2)的Linux系統調用列表:

http://man7.org/linux/man-pages/man2/syscalls.2.html

在Linux上有一個signal系統調用(參見Jim給出的Linux系統調用列表)。 你永遠不會直接陷入系統調用,你總是調用一個包裝函數(至少你很少直接生成陷阱)。 正如在說明書中指出signal()是只是一個包裝到一個系統調用可能不是signal酮(實施例給出了truncate由@Jim引用的文獻中)。 signal()函數位於libc中,並且該庫可以自由地實現該函數,前提是保留語義。 因此,正如您所提到的,對signal()的調用可能在給定的情況下陷阱signal系統調用或sigaction系統調用或任何合適的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM