嵌入式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语言开发做点贡献。



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值