Linux程序开发基础(一)

一、参数与选项
在命令行启动程序时,通常需要输入命令,而这些命令中就包括很多参数,如输入命令ls -l,其中的ls以及-l都是参数。参数还可以细分为操作数以及选项,如ls -l中的-l就是选项,而echo "hello world"中的hello world就是操作数。
选项的作用包括控制程序行为或者为程序提供特定的信息。如命令gdb -f filename,filename就是选项参数,通过参数向程序(gdb)提供附加信息。
POSIX中对于参数设定了特定的标准,如下:
1,程序名称不得少于两个字符,也不得多余九个字符
2,程序名称只能包含小写字母以及数字
3,选项名称应该使用单一的字符。
4,所有选项都应该以'-'开头
5,如果选项不需要参数,则多个选项应该可以合并。如test -a -b -c可以简写为test -abc
6,选项如果需要参数,则选项和参数之间由一个空格隔开
7,选项参数不能是可选的,即要么不需要,要么是必须要
8,如果选项参数有多个选择,可以将多个选择组织成一个字符串,每个选择之间用分号或空格隔开。如某程序test以-u标识一个选项,与这个选项对应的选项参数可以是you,me,him,则可以写作test -u "you,me,him"或者test -u "you me him"
9,在命令行中,选项应该出现在操作数之前
10,'--'用来标识选项的结束。命令中剩余的参数将被当作操作数
11,选项的顺序应该是无影响的(当然有冲突的除外)。
12,操作数的顺序可以制定一些必要的规范,程序应该说明参数输入的顺序。
13,如果程序需要读写特定的文件,程序需要根据自己的需要将'-'解释为标准输入或者标准输出。
当然,你也可以不用遵守这些规定,不过还是强烈建议按照规定来。

GNU长选项
GNU软件提倡使用长选项,如--help,--verbose等。长选项也有自己的一套规则:
1,如果软件遵守了POSIX标准,则对于针对POSIX标准的短选项都要由相应的长选项。
2,多余的GNU长选项不必要有相对应的POSIX短选项,不过建议有。
3,长选项必须要有唯一的缩写形式。
4,长选项与其参数之间由=或者空格隔开。如--file=/home/you/me或者--file /home/you/me
5,选项和参数可由命令行中的操作数来解释。
6、选项参数是可选的,
7、程序可以选择使用/来作为长选项的起始。


二、参数与选项处理
linux中提供了两个系统调用来处理命令行中的参数和选项:getopt和getopt_long。其中getopt()处理单字符参数选项,而getopt_long是为了更好的处理长选项。
关于getopt


argc & argv: 写过c程序的肯定对main()函数很熟悉,其形式一般是int main(int argc, char **argv),其中argc代表启动程序的命令中的参数个数,而argv是一个指针,这个指针指向一些指针,二后者则指向各个参数。注意,argc也包括命令中的函数名,一般由指针argv[0]确定。如命令echo "hello world"中,argc = 2,argv[0]指向"echo",argv[1]指向"hello world“。在argv数组中的最后一项为NULL,即有argv[argc] = NULL。另外,变量environ提供了另外一种方式获取命令行参数。由于一些不知名原因(多半是兼容性考虑),这个函数在标准头文件中没有声明,因此你必须自己声明这个变量。
extern char **environ;
这个变量的最后一个元素也是NULL。感觉和前面提到的argv一样,只是这里少了一个argc来表示参数个数,这样如果想要得到所有的参数,只能在循环读取参数时,检验environ[index]的值是否是NULL。
optstring:这个参数包含所有的选项名称,如果选项名称后有一个冒号,则表示本选项需要一个参数。如某程序需要两个选项,一个是-a,一个是-b,且其中b需要一个参数,则optstring为"ab:"。调用getopt,每当找到一个合法的选项,就会返回这个选项名称,如果这个选项需要一个参数,则optarg就会指向这个参数。
optind:当前的argv数组索引值。
optopt:发现非法选项时,getopt会返回"?"或者":",而optopt会包含这个非法选项所对应的字符。
opterr:当这个参数非0时,getopt函数在遇到非法选项或者发现缺少选项参数时会输出错误信息。注意,如果在调用getopt()时,将opterr设置为0,或者optstring的第一个字符为":"时,getopt在遇到错误时就不会输出这些消息。对于后面一种情况,getopt会根据错误类型做出不同响应,如在碰到非法选项时输出"?",如果缺少参数就会输出":"。

关于getopt_long
getopt()用来处理单字符选项,而getopt_long则用来处理长选项,

这个函数的头三个参数和getopt()函数一样,需要着重介绍的时候两个参数。指针longopts指向一个struct option的数组,longindex则指向一个变量,这个变量指向在longopts中找到的选项的索引值。



关于getopt_long_only
顾名思义,这个函数和getopt_long做同样的事,只是他处理的仅仅时长选项,而且选项必须以'-'开头。

 

###############################################################################################
###############################################################################################
环境变量
环境一词对于linux下运行的程序来说,指的是一些诸如“name=value“这样的数据对,这些数据对成为环境变量。name由字母或者下划线构成,但是不能以数字开头。环境变量通常用来控制程序行为。如gcc中使用-L选项控制库文件搜索路劲。环境变量可以减轻用户的负担,用户可以设定好环境变量,以后就不用频繁提供命令参数。当然,使用环境变量带来的隐患就是一旦用户在某处进行了修改,所有依赖此环境变量的程序都会受到影响。

 

有兴趣的可以研究一下linux中env命令的源代码,好程序的作用要比文字说明强很多。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嵌入式Linux应用开发基础教程主要涵盖了嵌入式Linux系统的概念、架构以及开发方法与技巧。在这个教程中,我们将学习如何开发出高效稳定的嵌入式Linux应用程序。 首先,我们将介绍嵌入式Linux系统的基本概念。嵌入式Linux系统是运行在资源有限的嵌入式设备上的操作系统,它的特点是小巧、高效、可定制性强。学习者需要了解Linux内核、驱动程序、文件系统以及应用程序之间的关系和交互方式。 然后,我们将学习如何搭建嵌入式开发环境。这包括选择合适的开发板和嵌入式Linux发行版,配置开发环境以及建立交叉编译工具链。学习者需要了解如何构建和交叉编译嵌入式应用程序,并将其烧录到嵌入式设备中。 接下来,我们将深入研究嵌入式Linux应用程序的开发方法。掌握C/C++编程语言、Linux系统编程和shell脚本编写等技能是非常重要的。学习者还需要了解嵌入式设备的特殊需求,如低功耗、多线程处理等。 此外,我们还将介绍常见的嵌入式开发工具和调试技巧,如GNU调试器(gdb)、跟踪工具(strace)等。对于系统调试和性能优化是非常有帮助的。学习者需要了解如何使用这些工具进行应用程序的调试和分析,以确保其在嵌入式设备上的稳定运行。 最后,我们将讨论嵌入式Linux应用程序的部署和维护。这包括将应用程序集成到嵌入式设备中、远程升级和配置管理等。学习者需要了解如何进行应用程序的部署和维护,以确保嵌入式系统的稳定性和安全性。 通过这个基础教程,学习者可以全面地了解嵌入式Linux应用开发的基本原理和方法。这将为他们进一步深入研究和应用嵌入式Linux技术提供坚实的基础

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值