10 22 訊號名稱與編號

2022-05-14 03:30:11 字數 2893 閱讀 5743

在本節中,我們將會講述如何在訊號編號與訊號名稱之間進行對映。一些系統提供了陣列

extern char *sys_siglist;

其中陣列索引就是訊號編號,給出乙個指向訊號名稱字串的指標。

freebsd 8.0, linux 3.2.0以及 mac os x 10.6.8都提供了這個訊號名稱的陣列,solaris 10也提供了,但是指標陣列名稱為_sys_siglist.

為了可移植地實現某一訊號編號對應訊號名稱的字串的列印,我們可以使用函式psignal.

#include

void

psignal

(int

signo

,const

char

*msg

);

#include

void

psiginfo

(const

siginfo_t

*info

,const

char

*msg

);

該函式的功能與函式psignal相類似,雖然該函式除了訊號處理函式之外還有很多可以訪問的資訊,但是具體列印的資訊因平台而異。

如果你只是需要字串描述,並不想要將其寫出到標準錯誤中去,比如說,你只是想要將其寫到乙個日誌檔案中去,那麼你可以使用函式strsignal,該函式與函式strerror相似(1.7節中講到)。

#include

char

*strsignal

(int

signo

);

returns

:a pointer to a

string

describing the signal

.

給定乙個訊號編號,函式strsignal就可以返回描述該訊號的字串。該字串可以被應用程式用於列印接收到訊號的錯誤資訊。

本書中講到的四個平台都實現了函式psignal以及strsignal,但是存在差異,在solaris 10上,strsignal在訊號編號無效的時候會返回乙個空指標,而freebsd 8.0,linux 3.2.0以及 mac os x 10.6.8會返回乙個現實訊號不可識別的字串。

僅僅只有linux 3.2.0以及solaris 10支援函式psiginfo.

solaris還提供了一對函式用於在訊號編號與訊號名稱之間做轉換。

#include

int

sig2str

(int

signo

,char

*str

);

int

str2sig

(const

char

*str

,int

*signop

);

both

return:0

ifok,-

1on error

.

該函式對於需要接受和列印訊號名稱以及訊號編號的互動式程式非常有用。

函式sig2str將訊號編號轉換成字串並儲存結果到str指向的記憶體中,呼叫者必須確保記憶體足夠大來儲存最大的字串,包括終止的null位元組,solaris在中提供了常量sig2str_max來定義了最大字元長度,字串包含了不帶字首」sig」的訊號名稱,舉例來說,轉換訊號sigkill的結果是」kill」被儲存到記憶體中。

函式str2sig將給定的訊號名稱轉換成訊號編號,訊號編號被儲存到整形指標指向的記憶體中,訊號名稱要麼是沒有sig字首的訊號名,要麼是十進位制數,比如說」9」.

注意,函式sig2str與函式str2sig與常規慣例是不一樣的,它們在執行失敗的時候並不會設定errno.

#include

#include

#include

#include

int

main

(void

)

執行效果如下圖所示:

os@debian

:~/unixprogram/

chapter10$

./10

_ff.

exe

this

iswhat i want to output before signal description

:

:

user

defined

signal

1

msg

=this

iswhat i want to output before signal description

:

os@debian

:~/unixprogram/

chapter10$

來自為知筆記(wiz)

根據編號取得完整名稱。

if exists select from sysobjects where name n fun tzjmc drop function dbo fun tzjmc gocreate function dbo fun tzjmc tcid int returns varchar 4000 asbe...

OpenCV獲取攝像頭編號及名稱

你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下markdown的基本語法知識。針對一般攝像頭的讀取,opencv為了實現跨平台讀取攝像頭時是使用的攝像頭索引 涉及的配置 opencv的環境不用說自己配置還有兩個系...

菜鳥與大牛 CSU 1022

blue和autogerk是好朋友。他們的相同點是都喜歡研究演算法,不同點是autogerk已是大牛而blue還是菜鳥。blue經常拿一些自以為很難的問題去問autogerk,想難倒他,但是每次autogerk都能輕而易舉地做出來。就在上個禮拜的星期天下午,autogerk正在玩遊戲,blue又拿著...