2013-03-27 15 views
6

Per alcune ragioni, ho bisogno di richiamare alcune chiamate di sistema del sistema (Linux) Ho controllato la documentazione del pacchetto 'syscall' e non ho trovato nulla a riguardo .Come posso richiamare la chiamata di sistema di Linux/UNIX in golang

Quindi ho appena visto un progetto (https://github.com/AllenDang/w32/blob/master/kernel32.go) che include l'apis di Windows. Ho letto un po 'il codice sorgente.

Esso utilizza

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

per caricare la libreria dinamica. Tuttavia, non c'è documentazione per la funzione NewLazyDLL()

Sono sicuro che ci dovrebbe essere una funzione simile per Linux/UNIX. C'è qualcuno che può dire a me il nome della funzione o il modo di richiamare la chiamata di sistema di Linux in Golang o le funzioni di carico da libc.so?

Maggiori dettagli

voglio richiamare sistema di chiamata 'demone' o 'fork' (voglio demonizzare il processo) perché non riesco a trovare la libreria golang fornisce loro.

+0

Che cosa esattamente vuoi fare? Il pacchetto 'syscall' è il pacchetto giusto per l'interfaccia diretta di chiamata di sistema, ma è difficile dare qualche consiglio senza sapere cosa si vuole fare. Tuttavia, non troverete il caricamento della DLL nella versione UNIX del pacchetto, poiché non fa parte dell'interfaccia di chiamata di sistema. –

+0

Grazie James per la tua risposta. In realtà voglio solo sapere come posso ottenere l'interfaccia di chiamata di sistema. –

risposta

4

Non esiste una funzione di stile daemon nella libreria standard Go al momento. C'è an open bug about adding such a feature, ma è stato posticipato fino a dopo la versione Go 1.1. Suggerirei di leggere la segnalazione di bug per alcuni dei motivi per cui non è così semplice come potrebbe apparire prima.

Esistono altri modi per eseguire i processi daemon oltre ad avere il daemon stesso. I demoni di init moderni come Upstart e Systemd possono gestire tali processi demone per te, ad esempio.

+0

Grazie James. Non userò fork/daemon nel mio programma, ma mi chiedo ancora come posso richiamare la chiamata di sistema di unix. Ho trovato che ci sono due funzioni chiamate Syscall/Syscall6 ma non ci sono documenti per questo. Queste due funzioni possono essere utilizzate per richiamare la chiamata di sistema di unix? –

+0

Le funzioni nel pacchetto 'systemcall' ti danno accesso alla maggior parte delle chiamate di sistema (come hai giustamente ipotizzato nella tua domanda). Ad esempio, 'syscall.Read' invocherà la chiamata di sistema' SYS_read'. Se la chiamata di sistema che stai cercando non è coperta dal pacchetto, chiedi informazioni su di esso in modo specifico. La risposta sopra copre la tua domanda specifica sulla demonizzazione di un processo. –

+0

Il pacchetto syscall espone (quasi) tutte le syscall della piattaforma su cui ti trovi. I contenuti di questo pacchetto sono diversi tra piattaforme diverse. Usa i file di origine con suffissi di piattaforma, come foo_linux.go e foo_windows.go. go build compilerà solo file con suffissi corrispondenti. Questo è un modo carino e pulito per calcolare il codice dipendente dalla piattaforma. – fuz

Problemi correlati