嵌入式linux编程中的一些基本操作

2019-07-13 00:05发布

    本文总结了一些嵌入式linux开发过程中的常用api,希望对大家有所帮助。
一 、 获取系统时间 int getlocaltime(struct tm *time) { struct timeval tv; time_t second; struct tm *temp; gettimeofday(&tv, NULL); second = tv.tv_sec; temp = localtime(&second); temp->tm_year += 1900; temp->tm_mon += 1; memcpy(time, temp,sizeof(struct tm)); return 1; }
二 、 设置系统时间 int setlocaltime(struct tm *tm) { time_t timesec; struct timeval tv; struct tm temptm; memcpy(&temptm,tm,sizeof(temptm)); temptm.tm_year = tm->tm_year - 1900; temptm.tm_yday = 0; temptm.tm_isdst = -1; /* Be sure to recheck dst. */ timesec = mktime(&temptm); tv.tv_sec = timesec; tv.tv_usec = 0; settimeofday(&tv,0); //设置系统时间 return 1; }
三 、 设置IP地址 int setip(char* ip) { struct ifreq temp; struct sockaddr_in *addr; int fd = 0; int ret = -1; strcpy(temp.ifr_name, "eth0"); if((fd=socket(AF_INET, SOCK_STREAM, 0))<0) { return -1; } addr = (struct sockaddr_in *)&(temp.ifr_addr); addr->sin_family = AF_INET; addr->sin_addr.s_addr = inet_addr(ip); ret = ioctl(fd, SIOCSIFADDR, &temp); close(fd); if(ret < 0) return -1; return 0; }
四 、 检查网线是否连接 int check_nic(void) { struct ifreq ifr; int skfd = socket(AF_INET, SOCK_DGRAM, 0); strcpy(ifr.ifr_name, "eth0"); if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0) { close(skfd); return -1; } if(ifr.ifr_flags & IFF_RUNNING) { printf("link up "); close(skfd); return 0; // 网卡已插上网线 } else { printf("link down "); close(skfd); return -1; } }
五 、 读取本机MAC地址 int read_mac(unsigned char *buf,char *name) { int sock; int ret; struct ifreq ifr; sock = socket(AF_INET, SOCK_DGRAM, 0); if(sock == -1) { perror("socket error"); return -1; } memset(&ifr, 0, sizeof(ifr)); strcpy(ifr.ifr_name, name); ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = '