Linux中int main(int argc, char **argv)分析

作者:GWD 时间:2019.7.25

一、led Linux驱动调用函数分析

int main(int argc, char **argv)
{
	int fd;
	int val = 1;
	fd = open("/dev/led_1", O_RDWR);
	if (fd < 0)
	{
		printf("can't open!\n");
	}
	if (argc != 2)
	{
		printf("Usage :\n");
		printf("%s <on|off>\n", argv[0]);
		return 0;
	}
	if (strcmp(argv[1], "on") == 0)
	{
		val  = 1;
	}
	else
	{
		val = 0;
	}
	
	write(fd, &val, 4);
	return 0;
}

(一)知识点:
1、问:带参数的主函数目的是什么?
答:main函数的参数其实和普通函数参数的用法基本是一样的,由于不能在程序运行的时候给main传递参数,所以才有int main(int argc,char* argv[])这种用法。
2、问:in(int argc, char **argv)中的argc和argv[]是什么?
答:argc是命令行总的参数个数 ;
argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数 命令行后面跟的用户输入的参数,比如: # ./led on,argc=2;argv[0]=./led;argv[1]=on;argv一般是用来为程序提供非常重要的信息,如:数据文件名,等等。在这个函数中若不记录on/off就无法打开led灯;

(二)、代码分析
第一种情况:
在这里插入图片描述
在命令行输入安装驱动的指令后,输入./led off此时argv[0]是./led,argv[1]是off;程序中的判断条件不满足所以val=0,val会通过buf传递给内核区域,关闭led灯;
第二种情况:
在这里插入图片描述
在命令行输入./led on后,此时argv[0]是./led,argv[1]是on程序中的判断条件满足所以val=1,val会通过buf传数据给内核区,从而打开led灯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值