Во время исследования моего другого вопроса Go package syscall conn.Read() is non-blocking and cause high CPU usage, я читаю исходный код в syscall
упаковке.Что означает «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
, как и почему эти вещи работают с конкретной платформой с помощью разных реализаций? И как пакет syscall
генерирует эти интерфейсы?
Если кто-то может объяснить конкретную функцию, такую как Read()
, связанный с syscall
, может помочь мне понять ее лучше, спасибо.
Системный вызов (...) выглядит как Go-иш издание функции старого системного вызова() из C. Это (VARIADIC) функция позволяет вы можете выполнить произвольные системные вызовы, указав номер syscall (здесь это SYS_READ) и набор аргументов. – fuz
Я думаю [эта ссылка] (http://en.wikipedia.org/wiki/Syscall) многое прояснит для вас. – thwd
Пакет 'syscall' обеспечивает доступ к низкоуровневым системным вызовам os. C-языковые версии находятся в 'man (2)' (поэтому 'man read' расскажет вам, что syscall.Read делает) - я думаю, что у них есть то же имя, что и для системных вызовов Go, за исключением без капитуляции. Файл, вероятно, автогенерируется, потому что он состоит из множества почти идентичных функций Go, обертывающих разные системные вызовы. –