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

    本文總結了一些嵌入式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語言開發做點貢獻。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章