2013-03-27 5 views
6

Aus bestimmten Gründen muss ich einige Systemaufrufe des Systems aufrufen (Linux) Ich überprüfte die Dokumentation des 'syscall' Pakets und konnte nichts darüber finden .Wie kann ich Systemaufruf von Linux/UNIX in Golang aufrufen

Dann sah ich gerade ein Projekt (https://github.com/AllenDang/w32/blob/master/kernel32.go), die Windows Apis wickelt. Ich habe den Quellcode ein wenig gelesen.

Es verwendet

modkernel32 = syscall.NewLazyDLL("kernel32.dll") 

die dynamische Bibliothek zu laden. Es gibt jedoch keine Dokumentation für die Funktion NewLazyDLL()

Ich bin mir sicher, dass es eine ähnliche Funktion für Linux/UNIX geben sollte. Gibt es jemanden, der mir den Namen der Funktion oder die Art, Systemaufruf von Linux in Golang oder Laden Funktionen von libc.so aufrufen kann?

Mehr Details

Ich will Systemaufruf ‚Daemon‘ oder ‚Gabel‘ aufzurufen (Ich möchte den Prozess daemonize), weil ich nicht golang Bibliothek bietet sie finden können.

+0

Was genau möchten Sie tun? Das 'syscall'-Paket ist das richtige Paket für die direkte Systemanruf-Schnittstelle, aber es ist schwierig, einen Ratschlag zu geben, ohne zu wissen, was Sie tun möchten. In der UNIX-Version des Pakets wird jedoch kein DLL-Laden angezeigt, da dies nicht Teil der Systemaufrufschnittstelle ist. –

+0

Danke James für deine Antwort. Eigentlich möchte ich nur wissen, wie ich die Systemanruf-Schnittstelle bekommen kann. –

Antwort

4

In der Go-Standardbibliothek gibt es zur Zeit keine daemon Style-Funktion. Es gibt an open bug about adding such a feature, aber es wurde bis nach der Go 1.1-Version verschoben. Ich würde vorschlagen, den Fehlerbericht aus einigen Gründen zu lesen, weil es nicht so einfach ist, wie es zuerst erscheinen könnte.

Es gibt andere Möglichkeiten, Daemon-Prozesse auszuführen, abgesehen davon, dass der Daemon Fork selbst besteht. Moderne Init-Daemons wie Upstart und Systemd können solche Daemon-Prozesse beispielsweise für Sie verwalten.

+0

Danke James. Ich werde nicht Fork/Daemon in meinem Programm verwenden, aber ich frage mich immer noch, wie ich Systemaufruf von Unix aufrufen kann. Ich habe herausgefunden, dass es zwei Funktionen namens Syscall/Syscall6 gibt, aber es gibt keine Dokumente dafür. Können diese beiden Funktionen verwendet werden, um den Systemaufruf von Unix aufzurufen? –

+0

Die Funktionen im 'systemcall'-Paket ermöglichen Ihnen den Zugriff auf die meisten Systemaufrufe (wie Sie in Ihrer Frage richtig vermutet haben). Zum Beispiel ruft 'syscall.Read' den Systemaufruf' SYS_read' auf. Wenn der bestimmte Systemanruf, nach dem Sie suchen, nicht durch das Paket abgedeckt ist, fragen Sie bitte speziell danach. Die obige Antwort bezieht sich auf Ihre spezifische Frage zur Daemonisierung eines Prozesses. –

+0

Das syscall-Paket macht (fast) alle Systemaufrufe der Plattform verfügbar, auf der Sie sich befinden. Der Inhalt dieses Pakets unterscheidet sich zwischen den verschiedenen Plattformen. Verwenden Sie Quelldateien mit Plattformsuffixen wie foo_linux.go und foo_windows.go. go build kompiliert nur Dateien mit passenden Suffixen. Dies ist eine nette und saubere Möglichkeit plattformabhängigen Code herauszufiltern. – fuz