Linux应用程序开发
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux应用程序开发
二、项目
说明:下列各个项目中的程序都要同时支持单字符选项和长选项
还需要支持一些事实上每一个GNU程序都会接受或应该接受的普通选项
具体要求每个程序都要增加以下两个选项:
-h
--help
列出所有可用选项用法信息,然后顺利退出程序。
-v
--version
输出版本号,然后顺利退出程序。
4. 模式的含义。
4.1 创建库libpm.a,库中至少有以下函数。
// 判断模式是否整数代码
bool isIntcode (char *pattern);
// 在作为模式的信号符号名前面加上SIG
char *plussig (char *pattern);
// 在作为模式的资源符号名前面加上RLIMIT_
char *plusrlimit (char *pattern);
// 输出模式的含义,采用选项-o时,outf为1;否则为0
void printpm (int outf);
4.2 在调用库函数sqrt(x)时,如果x当前的值小于零,则会导致定义域错误。
如果你的程序还调用了strerror函数或perror函数,则有可能在标准输出看到如下错误消息:
Math argument out of domain of func
这一错误消息在头文件/usr/include/asm-generic/errno-base.h中列出:
#define EDOM 33 /* Math argument out of domain of func */
其符号名和代码分别是EDOM和33,错误消息实际上是错误的含义。
errno-base.h共列出34个错误,而头文件errno.h中的错误代码为35-131。
类似地,头文件/usr/include/bits/signum.h中定义了信号的符号名和代码。
例如:只要从键盘按下Ctrl-C键,系统就把信号SIGINT发送给当前进程,提前结束运行。
此信号的定义如下:
#define SIGINT 2 /* Interrupt (ANSI). */
头文件/usr/include/asm-generic/resource.h也用同样的方式列出资源限制,例如:
#define RLIMIT_CPU 0 /* CPU time in ms */
现在,要求编写程序,在上述头文件中搜索模式,然后输出模式的含义。
用法如下:
$ pm [选项] pattern [outfile]
其中,模式pattern可以是符号名,也可以是整数代码。
参考选项"f:F:iIoO",其中:
-f, --file
要搜索的头文件作为该选项的参数。
-i, --ignore-case
忽略大小写,即模式可以用小写字母。符号名模式默认为大写字母。
-o, --output
该选项指定输出格式:
符号名[代码]: 模式含义字符串
例如,
EDOM [33]: Math argument out of domain of func
省略时只输出模式含义字符串。例如,
Math argument out of domain of func
outfile为输出文件,指定时,搜索结果会添加到输出文件;
outfile省略时,程序将在标准输出显示结果。
注意:每个信号符号名的头三个字母都是SIG,而资源符号名都以RLIMIT_开头。
因此,输入INT就代表SIGINT;输入CPU就代表RLIMIT_CPU