ile ilgili birlikte çalışabilirlik sorunu lib_proc.h
'dan proc_name(pid,...)
işlevini saran bir Go işlevi kullanıyorum.C ve Gofree()
Bu tam C prototip geçerli:
(en azından benim sistemde)/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/libproc.h
burada bulabilirsiniz
int proc_name(int pid, void * buffer, uint32_t buffersize) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
. Bu kod kaldırılır C.free(unsafe.Pointer(...))
ve import "unsafe"
maddesi çağrısına sürece derlemek olmaz
package goproc
/*
#include "libproc.h"
int call_proc_name(int pid, char *name, int name_size) {
return proc_name(pid, name, name_size);
}
*/
import "C"
import "unsafe"
import "strings"
type DarwinProcess struct {
Process
}
func (DarwinProcess) NameOf(pid int) string {
name := C.CString(strings.Repeat("\x00", 1024))
defer C.free(unsafe.Pointer(name))
nameLen := C.call_proc_name(C.int(pid), name, C.int(1024))
var result string
if (nameLen > 0) {
result = C.GoString(name);
} else {
result = ""
}
return result;
}
:
It
Git kodunu izler.DarwinProcess::NameOf(pid)
yönteminin yalnızca
Mac OS X ve
üzerinde çalışması amaçlanmıştır, bu kod C.free(...)
koddan kaldırılırsa çalışır.
Gerçek formda go build
sonra aşağıdaki hata iletisini alıyorum: could not determine kind of name for C.free
(ve daha fazlası, bu, tüm derleyici çıktısıdır).
C.free(...)
kaldırılması benim için kabul edilemez, C.CString()
ile ayrılan belleği düzgün bir şekilde nasıl boşaltacağımı bulmalıyım.
documentation'a göre şaşkın durumdayım, her şey doğru şekilde yapıldı. Bir çözüm bulamadık ne de web'de arama yapamıyorum.
cgo yorumunuza #include 'eklemeyi denediniz mi? –