2013-03-27 16 views
6

Bazı nedenlerden dolayı, bazı sistem çağrılarını çağırmam gerekiyor (Linux) 'syscall' paketinin belgelerini kontrol ettim ve bu konuda bir şey bulamadım .Golang'da Linux/UNIX sistem çağrısını nasıl çağırabilirim

Daha sonra sadece windows apis'i saran bir proje (https://github.com/AllenDang/w32/blob/master/kernel32.go) gördüm. Bunun kaynak kodunu biraz okudum.

O

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

dinamik kütüphane yüklemek için kullanır. Ancak, NewLazyDLL()

işlevine ilişkin bir belge bulunmamaktadır. Eminim Linux/UNIX için benzer bir işlev olmalıdır. bana bir fonksiyonun ismini veya Golang'da Linux'un sistem çağrısını veya libc.so'nun yükleme işlevlerini çağırmanın bir yolu var mı?

fazla detay

ben sistem çağrısı 'cin' veya 'çatal' (Ben sürecini Artalanda istiyorum) Ben golang kütüphane bunları sağlayan bulamadığından çağırmak istiyorum.

+0

Tam olarak ne yapmak istiyorsun? 'Syscall' paketi doğrudan sistem çağrı arayüzü için doğru pakettir, ancak ne yapmak istediğinizi bilmeden herhangi bir tavsiyede bulunmak zordur. Sistem çağrı arabiriminin bir parçası olmadığından, paketin UNIX sürümünde DLL yüklemesi bulamazsınız. –

+0

Cevabınız için teşekkürler James.Açıkça sadece sistem çağrı arayüzünü nasıl alabileceğimi bilmek istiyorum. –

cevap

4

Şu anda Go standart kitaplığında daemon stil işlevi yoktur. an open bug about adding such a feature var, ancak Go 1.1 sürümünden sonraya ertelendi. İlk olarak göründüğü kadar basit olmayan nedenlerden dolayı hata raporunu okumanızı tavsiye ederim. Daemon işlemlerinin, daemon çatalının kendisinin olmasına rağmen çalıştırmanın başka yolları da vardır. Örneğin, Upstart ve Systemd gibi modern init programları sizin için bu gibi deemon süreçlerini yönetebilir.

+0

Teşekkürler James. Programımda fork/daemon kullanmayacağım ama hala Unix'in sistem çağrısını nasıl başlatabileceğimi merak ediyorum. Syscall/Syscall6 adında iki işlev bulunduğunu ancak bunun için hiçbir belge olmadığını gördüm. Unix'in sistem çağrısını çağırmak için bu iki işlev kullanılabilir mi? –

+0

'systemcall' paketindeki işlevler, çoğu sistem çağrısına erişmenizi sağlar (sorunuzda doğru şekilde belirttiğiniz gibi). Örneğin, 'syscall.Read'' SYS_read' sistem çağrısını çağırır. Takip ettiğiniz sistem çağrı kapsamına girmiyorsa, lütfen bunları özel olarak sorun. Yukarıdaki cevap, bir süreci canlandırmakla ilgili özel sorunuzu kapsar. –

+0

Sistem paketi, bulunduğunuz platformun tüm syscall'lerini (neredeyse) gösterir. Bu paketin içeriği farklı platformlar arasında farklıdır. Kaynak dosyaları foo_linux.go ve foo_windows.go gibi platform sonekleriyle kullanın. go build sadece eşleşen son eklerle dosyaları derler. Bu, platforma bağlı kodları dışlamak için güzel ve temiz bir yoldur. – fuz

İlgili konular