嵌入式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;
}