2015-09-07 34 views
0

我在查找usleep()的定義。usleep的定義C

我在/usr/include/unistd.h找到了聲明。但也有它的聲明爲

extern int usleep (__useconds_t __useconds);

在哪裏可以找到函數的定義?
(請註明如有的方式是有比其他的grep,這樣對於其他的庫函數還我可以按照。)

我了Fedora 21使用gcc 4.8.3版本與Linux內核4.1

+0

你是什麼意思的「定義」? –

+0

如果你正在尋找一個實現http://osxr.org/glibc/source/sysdeps/unix/sysv/linux/usleep.c?v=glibc-2.14 –

+0

@DavidSchwartz函數/宏'usleep的定義「我想,這包含着身體。 – RatDon

回答

4

由於對於大多數庫函數,您將發現沒有定義,因爲它已經在編譯器自動鏈接到對象模塊的標準庫中進行了編譯。您可以在您的Linux發行版以及glibc網站提供的源代碼包中找到libc的完整源代碼(但請記住,某些發行版會添加它們的修補程序)。

至於usleep,你可能不會發現什麼有趣的,it's just a wrapper around nanosleep,這又僅僅是一個系統調用(所以你只要找到某個寄存器設置後跟一個sysenter指令 - 多汁的事情發生在內核模式下) 。 編輯實際上,因爲nanosleep是一個可取消的系統調用,它有點複雜,但點代表

+0

問題出在內核模式下,沒有微秒睡眠可用。但在用戶模式下,「usleep」在那裏。所以我試圖將用戶模式'usleep'集成到內核中。毫無疑問,它不會提供微秒級的精度,但有些事情總比沒有好。謝謝。我會尋找它。 – RatDon

+0

@RDdon:從* kernel *代碼(例如你的內核模塊)調用'usleep'或'nanosleep'是錯誤的和無意義的。然而,在用戶應用程序中是可能的。 –

+0

@BasileStarynkevitch由於沒有微秒睡眠的內核函數,我必須嘗試。內核也使用'gcc'進行編譯。所以值得一試。 :-) – RatDon