임베디드 LINUX 드라이버 학습 5.ioctl 문자 장치 드라이버 프로그래밍 (3 개) 사용자 공간 구현 코드

임베디드 LINUX 드라이버 학습 5.ioctl 문자 장치 드라이버 프로그래밍 (3 개) 사용자 공간 구현 코드

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