本文**:一、獲取/設定linux系統的網路資訊
1.獲取ip位址、子網掩碼位址、mac位址、廣播位址
#include
#include
#include
#include
#include
#include
int getnetworkinfo(void)
; char ip[32] = ;
char broadaddr[32] = ;
char subnetmask[32] = ;
if ((fd = socket(af_inet, sock_dgram, 0)) < 0)
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = (caddr_t)buf;
/* 執行完這句後ifc.ifc_len已經不一定就等於sizeof(buf),而是小於或等於sizeof(buf),取決於網絡卡的個數 */
if (!ioctl(fd, siocgifconf, (char *)&ifc))
//獲取ip位址
if (!ioctl(fd, siocgifaddr, (char *)&buf[inte***cenum]))
else
//獲取子網掩碼位址
if(!ioctl(fd, siocgifnetmask, &buf[inte***cenum]))
else
//獲取mac位址
if(!ioctl(fd, siocgifhwaddr, (char *)(&buf[inte***cenum])))
else
//獲取廣播位址
if(!ioctl(fd, siocgifbrdaddr, &buf[inte***cenum]))
else}}
else
close
(fd);
return 0;
}
2.設定ip位址、子網掩碼、閘道器位址#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int setnetworkinfo(const
char *ifname, const
char *ipaddr, const
char *netmask, const
char *gwip)
//設定ip位址
strncpy(ifr.ifr_name, ifname, ifnamsiz);
ifr.ifr_name[ifnamsiz - 1] = 0;
memset(&sin, 0, sizeof(sin));
sin.sin_family = af_inet;
sin.sin_addr.s_addr = inet_addr(ipaddr);
memcpy(&ifr.ifr_addr, &sin, sizeof(sin));
if (ioctl(fd, siocsifaddr, &ifr) < 0)
//設定子網掩碼
bzero(&ifr, sizeof(struct ifreq));
strncpy(ifr.ifr_name, ifname, ifnamsiz);
ifr.ifr_name[ifnamsiz - 1] = 0;
memset(&sin, 0, sizeof(sin));
sin.sin_family = af_inet;
sin.sin_addr.s_addr = inet_addr(netmask);
memcpy(&ifr.ifr_addr, &sin, sizeof(sin));
if(ioctl(fd, siocsifnetmask, &ifr ) < 0)
//設定閘道器位址
struct rtentry rm;
bzero(&rm, sizeof(struct rtentry));
rm.rt_dst.sa_family = af_inet;
rm.rt_gateway.sa_family = af_inet;
rm.rt_genmask.sa_family = af_inet;
memset(&sin, 0, sizeof(sin));
sin.sin_family = af_inet;
sin.sin_addr.s_addr = inet_addr(gwip);
memcpy(&rm.rt_gateway, &sin, sizeof(sin));
rm.rt_dev = (char *)ifname;
rm.rt_flags = rtf_up | rtf_gateway ;
if(ioctl(fd, siocaddrt, &rm ) < 0)
//啟用介面
ifr.ifr_flags |= iff_up | iff_running;
if (ioctl(fd, siocsifflags, &ifr) < 0)
return
0;}
二、程式設計獲取cpu、記憶體和硬碟的使用率
1. 獲取cpu使用率
#include
#include
/* cpu_info_t結構體存放cpu相關資訊 */
typedef
struct _cpu_info
cpu_info_t;
/* 從/proc/stat檔案中獲取cpu的相關資訊 */
void get_cpu_occupy(cpu_info_t* info)
; fp = fopen("/proc/stat", "r");
fgets(buf, sizeof(buf), fp);
sscanf(buf, "%s %u %u %u %u %u %u %u", info->name, &info->user, &info->nice,
&info->system, &info->idle, &info->iowait, &info->irq, &info->softirq);
fclose(fp);
}/* 計算cpu的使用率 */
double calc_cpu_rate(cpu_info_t* old_info, cpu_info_t* new_info)
return0;}
int main(void)
2. 獲取記憶體使用率.#include
typedef
struct _mem_info_t
mem_info_t;
void get_memory_occupy()
; mem_info_t info;
double mem_total, mem_used_rate;
fp = fopen("/proc/meminfo", "r");
fgets(buf, sizeof(buf), fp);
sscanf(buf, "%s %lu %s\n", info.name, &info.total, &info.name2);
mem_total = info.total;
fgets(buf, sizeof(buf), fp);
sscanf(buf, "%s %lu %s\n", info.name, &info.total, &info.name2);
mem_used_rate = (1 - info.total / mem_total) * 100;
mem_total = mem_total / (1024 * 1024); //kb -> gb
printf("記憶體大小為: %.0lfg, 佔用率為: %.2lf\n", mem_total, mem_used_rate);
}int main(void)
3.獲取磁碟使用率#include
void get_hard_drive_rate()
pclose(fp);
printf("磁碟總大小: %.4lfg, 使用率: %.2lf%\n", total / (1024 * 1024), used / total * 100);
}int main(void)
Opencv常用函式記錄
pip install opencv python 使用import cv2 獲得影象的形狀,返回值是乙個包含行數,列數,通道數的元組 print image.shape print image.size 影象的資料型別 print image.dtype 各引數依次是 新增的文字 左上角座標 字型...
Python 常用函式記錄
x np.arange 3 x array 0,1,2 x.shape 3,x np.newaxis array 0 1 2 將一維的陣列變成二維的,並且np.newaxis 放在y位置就所有值都放在列,放在x位置,則bian成 1,3 的陣列 2.各種array的區分 np.array 3 產生大...
Linux 常用操作記錄
對映的方式共享目錄 mount t cifs o username 使用者名稱,password 密碼 ip 目錄 需掛載的路徑 設定dns 修改 etc resolv.conf 新增 nameserver 10.35.0.3 例 putty使用ssh編碼設定 window translation ...