Linux应用程序开发

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档