Single UNIX Specification(SUS)對此函式的原型有歧見。此函式的BSD 版本具有一
個型別為
unsigned long
的參數,而且沒有傳回值。然而,此函式的SUS 版本則具有一
個型別為
useconds_t
的參數,而且會傳回一個
int
值。如果
_XOPEN_SOURCE
被定義成
500
或更高的值,Linux 會採用SUS的做法。如果
_XOPEN_SOURCE
未定義,或者被設定成小
於
500
的值,則Linux 會採用BSD 的做法。
執行成功時,SUS版本會傳回
0
,發生錯誤時,則會傳回
-1
。有效的
errno
值是
EINTR
(如果休眠的時候遭到一個信號中斷)或是
EINVAL
(如果
usecs
太大;在Linux上,此
型別的整個範圍都是有效的,因此絕不會發生此錯誤)。
按規定,
useconds_t
型別是一個無號整數,可以保存高達1,000,000 的值。
由於這兩種不相容原型之間的差異,以及事實上有些Unix 系統僅支援其中一種原型,
所以聰明的做法就是不要明確地在你的程式碼中引用
useconds_t
型別。要達到最大的移
植性,應該假定參數是一個
unsigned int
,而不要依賴
usleep()
的傳回值:
void usleep (unsigned int usec);
它的用法如下所示:
unsigned int usecs = 200;
usleep (usecs); ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month, and much more.