Chinaunix首页 | 论坛 | 博客
  • 博客访问: 300350
  • 博文数量: 51
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1507
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-23 15:58
个人简介

喜欢Liunx,C,爱好嵌入式技术,爱好Qt 等跨平台技术

文章分类

全部博文(51)

文章存档

2014年(1)

2013年(50)

分类: 嵌入式

2013-07-10 12:38:45

#include                               /*下面函数要用到的头文件*/
#include 
#include
#include

int main(int argc, char **argv)                
/*运行时参数传递,开或关哪个LED*/
{                                              
int
on;                                                  
/*定义led状态变量,1表示灯亮,2表示灯灭*/
int
led_no;                                           /*定义led变量--哪个led*/
int
fd;                                                     /*定义led设备文件描述符的变量*/
if
(                         argc != 3 || \             /*判断命令输入参数个数*/
       
sscanf(argv[1], "%d", &led_no) != 1 || \                   /*
第一个字符串参数表示要操作led*/

sscanf(argv[2],"%d", &on) != 1 || \                                 
/*第2个字符串参数作为LED状态*/
                       on < 0 || on > 1 ||
\                                           /*开和关,两个状态*/
               
led_no < 0 || led_no > 3 ) \                                    
/*4个LED*/
{
fprintf(stderr, "Usage: leds led_no
0|1\n");                      
/*如果条件不满足输出出错信息*/
exit(1);                                                                              
/*退出程序,返回1,表示出现错误*/
}
fd = open("/dev/leds0", 0);                  
/*为只读打开leds0文件,取出文件描述符*/
if (fd < 0) {                                 
    fd = open("/dev/leds", 0);                 
/*如果打开leds0出错,再以只读方式打开leds文件*/
}
if (fd < 0) {
   perror("open
device leds");                 
/*如果打开led文件出错,拿不到文件描述符,用perror宏输出错原因及信息*/
exit(1);                                               
/*出错退出*/
}
ioctl(fd, on, led_no);                         
/*用ioctl()函数控制LED,其中fd--是前面打开的LED文件描述符,on--是开关命令0和1,led_no--是哪个LED*/
close(fd);                                          
/*关闭LED描述符,与前面open()对应*/
return 0;                                           
/*正常返回*/
}

说明:sscanf() - 从一个字符串中读进与指定格式相符的数据.
sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。其中的format可以是一个或多个 {%[*]
[width] [{h | l | I64 | L}]type | '''' '''' | ''''\t'''' | ''''\n'''' | 非%符号}

sscanf(argv[1], "%d", &led_no) != 1 || sscanf(argv[2],"%d",
&on) != 1 ||

表示从argv[1](argv[2])读字符,并转换成整形给led_no(on)。

阅读(1756) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~