linux常用函式記錄

2021-08-19 20:11:48 字數 4271 閱讀 9883

本文**:

一、獲取/設定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 ...