休眠函式與訊號對映函式

2021-09-02 21:10:46 字數 2160 閱讀 4355

下面 3 個函式可以使程序休眠指定的時間(會有所延遲)。

#include

unsigned int sleep(unsigned int second); /* 返回值:0 或未休眠完的秒數 */

#include

int nanosleep(const struct timespec *reqtp, struct timespec *remtp);

/* 返回值:若休眠到要求的時間,返回 0;若出錯,返回 -1 */

int clock_nanosleep(clockid_t clock_id,int flags,const struct timespec *reqtp,struct timespec *remtp);

/* 返回值:若休眠到要求的時間,返回 0;若出錯,返回 錯誤碼 */

sleep 函式使程序掛起直到經過 seconds 秒或呼叫程序捕捉到乙個訊號並從訊號處理程式返回。

nanosleep 函式與 sleep 類似,但提供了納秒級的精度。reqtp 引數用秒和納秒指定了需要休眠的時間長度,remtp 引數則代表未休眠完的時間長度,如果不感興趣可將其置為 null。nanosleep 函式並不涉及產生任何訊號,所以不需要擔心與其他函式的互動。

clock_nanosleep 函式使用相對於特定時鐘的延遲時間來掛起呼叫執行緒。clock_id 引數指定了計算延遲時間基於的時鐘。flags 引數用於控制延遲是相對的(設定為 0 時)還是絕對的(設定為 timer_abstime 時)。reqtp 和 remtp 同 nanosleep 函式。不過使用絕對時間時,remtp 引數未使用,因為沒必要。在時鐘到達指定的絕對時間值以前,可以為其他的 clock_nanosleep 呼叫復用 reqtp 引數相同的值。

下面程式是 posix.1 sleep 函式的一種實現,它可靠地處理訊號,避免了早期實現中的競爭條件,但是仍未處理與以前設定的鬧鐘的互動作用(posix.1 並未顯示地對這些互動進行定義)。

#include

#include

static void sig_alrm(int signo)

unsigned int sleep(unsigned int seconds)

下面幾個函式可用於查詢訊號編號和訊號名之間的對映關係。

#include

void psignal(int signo, const char *msg);

void psiginfo(const siginfo_t *info, const char *msg);

#include

char *strsignal(int signo); /* 返回值:指向描述該訊號的字串的指標 */

// solaris 提供的

#include

int sig2str(int signo, char *str);

int str2sig(const char *str, int *signop);

/* 返回值:若成功,都返回 0;否則,都返回 -1 */

psignal 函式可移植地列印與訊號編號對應的字串。引數 msg(通常是程式名)輸出到標準錯誤檔案,後面跟著乙個冒號和乙個空格,再是該訊號的說明,最後是乙個換行符。如果 msg 是 null,則只有訊號說明部分輸出到標準錯誤檔案,類似於 perror。

如果在 sigaction 訊號處理程式中有 siginfo 結構,則可以使用 psiginfo 函式列印訊號資訊。它與 psignal 函式類似,不過可以訪問除訊號編號以外的更多資訊,但不同的平台輸出的這些額外資訊可能有所不同。

如果只需要訊號的字元描述部分,也不需要把它寫到標準錯誤檔案中(如可以寫到日誌檔案中),就可以使用 strsignal 函式,它類似於 strerror。

sig2str 和 str2sig 函式是 solaris 提供的。sig2str 將給定的訊號編號翻譯成字串存放在 str 所指向的儲存區,它會去掉訊號名中的「sig」字首。str2sig 則將給出的訊號名翻譯成訊號編號存放在 signop 指向的整型中,該名字要麼是不帶「sig」字首的訊號名,要麼是表示十進位制訊號編號的字串(如「9」)。注意,這兩個函式失敗時都不會設定 errno。

記憶體對映函式

記憶體對映函式 include 把檔案內容和一塊同樣大小的記憶體空間關聯起來 void mmap void addr,size t length,int prot,int flags,int fd,off t offset addr null 系統自動分配記憶體空間 length 檔案中內容的大小 ...

記憶體對映函式

mmap函式 文章分類 c 程式設計 mmap函式的使用方法 unix網路程式設計第二卷程序間通訊對mmap函式進行了說明。該函式主要用途有三個 1 將乙個普通檔案對映到記憶體中,通常在需要對檔案進行頻繁讀寫時使用,這樣用記憶體讀寫取代i o讀寫,以獲得較高的效能 2 將特殊檔案進行匿名記憶體對映,...

python 函式對映 Python對映函式

我需要一些關於python的map函式的幫助。我正在嘗試執行此 但出現錯誤 更新帖子 這是我的確切 以及每個函式的輸出 infinity 1000000 invalid node 1 startnode 0 values to assign to each node class node def i...