嵌入式LINUX驱动学习之5.ioctl字符设备驱动编程(三)用户空间实现代码

嵌入式LINUX驱动学习之5.ioctl字符设备驱动编程(三)用户空间实现代码

include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#define LED_ON     0X100
#define LED_OFF    0X101
#define LED_STATE  0X110
int main(int argc,char *argv[]){
    
    
    unsigned int ucmd;
    unsigned long uindex[4] = {
    
    1};
    /*检查命令格式*/
    if((argc ==3)&&(!strcmp(argv[2],"state"))){
    
    }
    else if(argc != 4){
    
    
        printf("命令错误:\n");
        printf("          comm <cdev_name> <on | off> <led_num>\n");
        return -1;
    }
    /*打开字符设备文件,并检查是否打开成功
    int fp = open(argv[1],O_RDWR);
    if(fp < 0){
        printf("文件打开失败\n");
        return -1;
    }
    if(!strcmp(argv[2],"on")){
        ucmd = LED_ON;
    }
    else if(!strcmp(argv[2],"off")){
        ucmd = LED_OFF;
    }
    else if(!strcmp(argv[2],"state")){
        ucmd = LED_STATE;
    }
    else {
        printf("参数错误: on | off | state \n");
        close(fp);
        return -1;
    }
    if(strcmp(argv[2],"state")){
        uindex[0] = strtoul(argv[3],NULL,0);
    }
    ioctl(fp,ucmd,uindex);
    if(!strcmp(argv[2],"state")){
        int i = 0;
        for(;i<4 ; i++){
             if(uindex[i] == 0){
                 printf("LED%d灯状态为开\n",i+1);
             }
             else {
                 printf("LED%d灯状态为关\n",i+1);
             }
        }
    }
    close(fp);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_47273317/article/details/107848636
今日推荐