读书笔记之:高级Linux编程(ch1-4)

第2章 编写优质GNU/Linux软件

1.与运行环境交互

获取参数:主要采用getopt和getopt_long函数

头文件 #include<unistd.h>  或 <getopt.h>

函数原型 int getopt(int argc,char * const argv[ ],const char * optstring);  

int getopt_long(int argc, char * const argv[], const char *optstring,const struct option *longopts, int *longindex); 

参数说明 参数argc和argv是由main()传递的参数个数和内容。

参数 optstring为选项字符串, 告知 getopt()可以处理哪个选项以及哪个选项需要参数,

如果选项字符后无冒号, 表示参数选项不包含参数,处理时忽略参数。

如果选项字符后跟冒号":", 表示参数选项含有参数,跟在参数选项后的一字符串为该选项的参数

如果选项字符后跟双冒号"::", 表示该选项的参数为可选,根据具体的命令而定。(不是所有Linux都支持)

longopts 是结构数组,用来指明短参数对应的长参数,使用如下结构:

struct option {

const char *name;// 长选项的名字

int has_arg;// 是否有参数:0没有

int *flag;//如何返回长选项的结果,一般为NULL

int val;//将要返回的结果,可以理解为对应的短选项

};类似这种:

const struct option long_options[] = {

{ "help", 0, NULL, 'h' },

{ "output", 1, NULL, 'o' },

{ "verbose", 0, NULL, 'v' },

{ NULL, 0, NULL, 0}//数组中最后一个元素的所有域都应为 0

};

extern char *optarg;

extern int optind, opterr, optopt;

全域变量optarg 指向当前选项的参数,如果没有参数则为空。

 

2. stdout 是经过缓冲处理的

在C++中,cout和cerr之间也有这样的区别。注意endl操作符除了输出换行符,还会执行刷新操作;如果你不希望执行刷新操作(例如出于运行效率的考虑)则应该使用常量'\n'表示换行。

 

3. 环境变量:

environ数组包含了所有环境变量,使用时需要extern char** environ;

不要直接修改 environ 变量;如果需要修改环境变量,则应通过 setenv 和 unsetenv 函数完成。

 

4.临时文件

5. 编写并使用程序库

存档文件

6. 共享库

7.动态加载与卸载

第4章 线程

1. C++中线程清理方法

posted @ 2012-04-30 23:21  Mr.Rico  阅读(457)  评论(0编辑  收藏  举报