喜欢Liunx,C,爱好嵌入式技术,爱好Qt 等跨平台技术
分类: 嵌入式
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)。