Lors de la recherche de mon autre question Go package syscall conn.Read() is non-blocking and cause high CPU usage, j'ai lu le code source dans syscall
package.Que signifie "Syscall()" dans go package "syscall"?
Depuis que je trouve mon dernier numéro sur OS X 10.8.3, voici le code source lié:
http://golang.org/src/pkg/syscall/zsyscall_darwin_amd64.go?h=Read#L898
Je ne sais pas ce que Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
signifie, en fait, je ne comprends pas des étoffes comme unsafe.Pointer
& Syscall()
. Comment ça marche? En outre, peut-on expliquer le commentaire // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
, comment et pourquoi ces choses fonctionnent avec une plate-forme spécifique par différentes implémentations? Et comment le paquet syscall
génère ces interfaces?
Si quelqu'un peut expliquer une fonction spécifique comme Read()
liée à syscall
pourrait être m'aider à mieux le comprendre, merci.
syscall (...) ressemble à une édition Go-ish de la fonction ancienne syscall() de C. Cette (variadique) permet Vous pouvez effectuer des appels système arbitraires en fournissant le numéro de syscall (ici, il s'agit de SYS_READ) et un ensemble d'arguments. – fuz
Je pense que [ce lien] (http://en.wikipedia.org/wiki/Syscall) clarifiera beaucoup pour vous. – thwd
Le pack 'syscall' permet d'accéder aux appels système OS de bas niveau. Les versions en langage C sont dans 'man (2)' (donc 'man read' vous dira ce que syscall.Read fait) - Je pense qu'ils ont le même nom que les Go syscalls sauf sans la lettre capitale. Le fichier est probablement généré automatiquement, car il contient une grande quantité de fonctions Go presque identiques qui enveloppent différents appels système. –