示例#1
0
func GetNetConfig() (C.sigar_net_interface_config_t, []C.sigar_net_interface_config_t, []C.sigar_net_interface_stat_t) {

	var sigar *C.sigar_t = GetSigarHandle()
	var netlistconf C.sigar_net_interface_list_t
	var netconfPrimary C.sigar_net_interface_config_t

	C.sigar_net_interface_config_primary_get(sigar, &netconfPrimary)

	C.sigar_net_interface_list_get(sigar, &netlistconf)

	var length int = int(netlistconf.number)

	goInterfacesNames := ((*[1 << 30]*C.char)(unsafe.Pointer(netlistconf.data)))[:length]

	//cinteraces:=GetGoSlice(length, unsafe.Pointer(netlistconf.data))
	//goInterfacesNames := *(*[]C.char)(unsafe.Pointer(&cinteraces))

	var netconf = make([]C.sigar_net_interface_config_t, length)
	var netstat = make([]C.sigar_net_interface_stat_t, length)

	for i := 0; i < length; i++ {

		C.sigar_net_interface_config_get(sigar, goInterfacesNames[i],
			&netconf[i])

		C.sigar_net_interface_stat_get(sigar, goInterfacesNames[i],
			&netstat[i])
	}

	C.sigar_net_interface_list_destroy(sigar, &netlistconf)

	return netconfPrimary, netconf, netstat
}
示例#2
0
func getNetInterfaceNamesWithSigar(sigar *C.sigar_t) (goInterfacesNames []*C.char, length int, closeable func(sigar *C.sigar_t)) {
	var netlistconf C.sigar_net_interface_list_t

	C.sigar_net_interface_list_get(sigar, &netlistconf)

	length = int(netlistconf.number)

	cinteraces := GetGoSlice(length, unsafe.Pointer(netlistconf.data))
	goInterfacesNames = *((*[]*C.char)(unsafe.Pointer(&cinteraces)))

	//goInterfacesNames = ((*[1 << 30]*C.char)(unsafe.Pointer(netlistconf.data)))[:length]

	return goInterfacesNames,
		length,
		func(sigar *C.sigar_t) {
			C.sigar_net_interface_list_destroy(sigar, &netlistconf)
		}
}