在研究我的另一個問題Go package syscall conn.Read() is non-blocking and cause high CPU usage期間,我讀了syscall
包的源代碼。什麼「Syscall()」意味着去包「系統調用」?
因爲我發現我的最後一個問題上的OS X 10.8.3,這裏是相關的源代碼:
http://golang.org/src/pkg/syscall/zsyscall_darwin_amd64.go?h=Read#L898
我不知道是什麼Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
手段,其實我不明白的東西像unsafe.Pointer
& Syscall()
。他們如何工作?
此外,任何人都可以解釋// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
的評論,這些東西如何以及爲什麼通過不同的實現與特定平臺協同工作?以及如何生成這些接口的包?
如果有人可以解釋一個特定的功能,如Read()
與syscall
有關可以幫助我更好地理解它,謝謝。
系統調用(...)看起來像舊的系統調用()函數從C本(可變參數)功能允許轉到十歲上下版你通過提供系統調用號(這裏是SYS_READ)和一組參數來執行任意系統調用。 – fuz 2013-05-13 15:43:27
我認爲[此鏈接](http://en.wikipedia.org/wiki/Syscall)將爲您澄清很多。 – thwd 2013-05-13 15:49:24
'syscall'包提供對低級os系統調用的訪問。 C語言版本在man(2)中(所以'man read'會告訴你什麼是syscall.Read) - 我認爲它們和Go系統調用的名稱相同,除了沒有capitial字母。該文件可能是自動生成的,因爲它包含很多幾乎相同的Go函數,它們包裝不同的系統調用。 – 2013-05-13 16:49:53