本文總結了一些嵌入式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\n");
close(skfd);
return 0; // 網卡已插上網線
}
else
{
printf("link down\n");
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] = '\0';
ret = ioctl(sock,SIOCGIFHWADDR,&ifr);
if(ret == 0)
{
memcpy(buf, ifr.ifr_hwaddr.sa_data, 6);
printf("HW address is: %02x:%02x:%02x:%02x:%02x:%02x \n",
(unsigned char)buf[0], (unsigned char) buf[1], (unsigned char) buf[2],
(unsigned char)buf[3], (unsigned char) buf[4], (unsigned char)buf[5]);
}
else
{
perror("ioctl error!\n");
}
close(sock);
return ret;
}
六、 判斷文件是否存在
int is_file_exist(const char *file_path)
{
if(file_path == NULL)
return -1;
if(access(file_path,F_OK)==0)
return 1;
return -1;
}
七 、 獲取IP地址
void getip(unsigned char* ip_buf,char * name)
{
struct ifreq temp;
struct sockaddr_in *myaddr;
int fd = 0;
int ret = -1;
strcpy(temp.ifr_name, name);
if((fd=socket(AF_INET, SOCK_STREAM, 0))<0)
{
return NULL;
}
ret = ioctl(fd, SIOCGIFADDR, &temp);
close(fd);
if(ret < 0)
return NULL;
myaddr = (struct sockaddr_in *)&(temp.ifr_addr);
strcpy(ip_buf, inet_ntoa(myaddr->sin_addr));
printf("getip:%s\n",ip_buf);
}
八 、 快速排序
void QuickSort(int * num,int low,int high)
{
int temp;
if(low>=high) return;
int mid=(low+high)/2,i=low,j=high,x;
x=num[mid];
while(1)
{
while(num[i]<x) i++;
while(num[j]>x) j--;
if(i>=j) break;
temp=num[i];
num[i]=num[j];
num[j]=temp;
}
num[mid]=num[j];
num[j]=x;
QuickSort(num,low,j-1);
QuickSort(num,j+1,high);
return;
}
OK,就講這麼多了,看看大家有什麼補充的,都貼出來吧,也爲C語言開發做點貢獻。