2013-03-27 12 views
6

Z pewnych powodów muszę wywołać niektóre wywołania systemowe systemu (Linux) Sprawdziłem dokumentację pakietu "syscall" i nie mogłem znaleźć nic na ten temat .Jak mogę wywołać systemowe wywołanie systemu Linux/UNIX w golang

Wtedy właśnie zobaczyłem projekt (https://github.com/AllenDang/w32/blob/master/kernel32.go), który otacza okna apis. Przeczytałem trochę kod źródłowy.

Wykorzystuje

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

załadować biblioteki dynamicznej. Jednak nie ma dokumentacji dla funkcji NewLazyDLL()

Jestem pewien, że powinna istnieć podobna funkcja dla Linux/UNIX. Czy jest ktoś, kto może powiedzieć mi nazwę funkcji lub sposób wywoływania wywołania systemowego Linux w Golang lub funkcji ładowania z libc.so?

Więcej szczegółów

Chcę wywołać wywołanie systemowe „demon” lub „widelec” (Chcę daemonize procesu), ponieważ nie mogę znaleźć golang biblioteka zapewnia im.

+0

Co dokładnie chcesz zrobić? Pakiet 'syscall' jest odpowiednim pakietem do bezpośredniego interfejsu wywołań systemowych, ale trudno jest udzielić jakiejkolwiek porady, nie wiedząc, co chcesz zrobić. Nie znajdziesz jednak ładowania DLL w wersji UNIX pakietu, ponieważ nie jest to część interfejsu wywołań systemowych. –

+0

Dziękuję Jamesowi za odpowiedź. Po prostu chcę wiedzieć, w jaki sposób mogę uzyskać interfejs wywołania systemowego. –

Odpowiedz

4

Brak funkcji stylu daemon w standardowej bibliotece Go. Jest an open bug about adding such a feature, ale został odroczony do czasu wydania wersji Go 1.1. Sugerowałbym przeczytanie raportu o błędzie z kilku powodów, które nie są tak proste, jak mogłoby się wydawać.

Istnieją inne sposoby uruchamiania procesów demona, z wyjątkiem samego widma demona. Współczesne demony takie jak Upstart i Systemd mogą na przykład zarządzać takimi procesami demonów.

+0

Dzięki James. Nie będę używał fork/daemon w moim programie, ale wciąż zastanawiam się, w jaki sposób mogę wywołać systemowe wywołanie unix. Zauważyłem, że istnieją dwie funkcje o nazwie Syscall/Syscall6, ale nie ma żadnych dokumentów dla niego. Czy te dwie funkcje mogą być użyte do wywołania wywołania systemowego unix? –

+0

Funkcje w pakiecie 'systemcall' zapewniają dostęp do większości wywołań systemowych (jak słusznie przypuszczałeś w swoim pytaniu). Na przykład 'syscall.Read' wywoła wywołanie systemowe' SYS_read'. Jeśli konkretna rozmowa systemowa, o którą prosisz, nie jest objęta pakietem, zapytaj o nią konkretnie. Powyższa odpowiedź dotyczy konkretnego pytania na temat demonizacji procesu. –

+0

Pakiet syscall udostępnia (prawie) wszystkie platformy platformy, na której jesteś. Zawartość tego pakietu jest różna dla różnych platform. Użyj plików źródłowych z przyrostkami platformy, takimi jak foo_linux.go i foo_windows.go. go build będzie kompilował tylko pliki z dopasowanymi sufiksami. Jest to miły i czysty sposób na wyodrębnienie kodu zależnego od platformy. – fuz

Powiązane problemy