时光飞逝~

uc高级编程(二)

一、库工具介绍

1.ldconfig

此为动态链接库管理命令,目的是让动态链接库为系统所共享

搜索路径有三个  两默认(usr/lib,lib)  还一个动态库配置文件etc/ld.so.conf,搜索可共享的动态链接库,从而创建出动态装入程序所需的连接和缓存文件(这里不太懂),缓存文件etc/ld.so.cache,此文件已保存好用于动态链接库的名字列表。

常用命令

-v或--verbose 用此选项时,ldconfig将显示正在扫描的目录及搜索到的动态链接库,还有它所创建的链接的名字

-n 用此选项是ldconfig只扫描命令行制定的目录,不扫描系统默认目录(usr/lib,lib)和动态库配置文件etc/ld.so.conf所列的目录

-N此选项指示ldconfig不创建新的缓冲文件(etc/ld.so.cache),在未使用-X的情况下,ipconfig照常更新链接文件

-X 此选项指示ldconfig不更新文件的链接,如果没用-N,则仍然正常更新缓冲文件。

-f CONF此选项指定动态链接库的配置文件为CONF,默认是etc/ld.so.conf

-C CACHE 此选项生成缓存文件CACHE,默认是etc/ld.so.conf

-r ROOT 改变应用程序的根目录为ROOT

-l 专家模式,需要手动设置连接,一把不建议用。

-p或--print-cache  ldconfig打印出当前缓存文件中共享库的名字

-c FORMAT 此选项用于指定缓存文件的格式,有old、new、compat(兼容,默认) 三种格式

-V 打印出ldconfig的版本信息

-?或--help 或--usage 打印帮助信息

2.nm

用于列出目标文件的符号清单

-p不排序显示   -r逆序显示 -size-sort大小排列显示  -o用源文件标示成员符号

-s 显示模块索引信息 -D对动态库用动态符号  -g显示定义为外部的符号

3.strip

去除指定目标文件和静态库中的调试信息

4.ldd

列出共享库的依赖关系

5.objdump

显示二进制信息

-S 尽可能反汇编出源代码,尤其加了-g

--show-raw-insn  显示机器码  比较恶劣  除非指定了--prefix-addresses,这将是缺省选项

--no-show-raw-insn 不显示机器码,指定了--prefix-addresses时的缺省设置

三、异常处理

1.根据返回值判断异常

一般数据   -1代表错误 

指针    NULL或0Xffffffff代表错误

判断状态,比如返回1成功,0失败

void返回值  一般没异常用这个

2.全局变量errno获取错误原因

三个函数

printf("%m");此函数自动寻找errno然后打印错误信息

strerror(errno);此函数的返回值为错误信息,需借助printf来打印

perror("")此函数自动寻找errno并打印错误原因,本人很喜欢这个,方便快捷

 

唯一能编译linux内核的编译器是gcc

 

四、内存管理

1.环境变量

环境表eviron,是一个二级指针,指向一个字符串数组,该字符串以NULL结束。

eviron的几个函数

getenv 返回name关联的value指针

putenv 将"name=value"的环境变量放进环境表

setenv 将name设置为value,第三个参数为0代表不修改已有的变量,其他数代表修改

unsetenv 删除

clearenv删除所有项

 

c语言的内存管理顺序

malloc/free是程序员层面的内存分配与释放,实现需要sbrk和brk两个函数,这两个函数又需要mmap来实现内存映射,才能访问到内存

进程与内存

一般的进程会涉及到5种不同的数据段

全局区   全局变量,静态变量存放的地方

代码段   函数存放的地方,有只读属性,一般认为字符串的字面值也在此处

bss段    未初始化的全局变量存在的地方

堆区      用户自由控制的内存区

栈区     局部变量,数组的存储区

32为系统的每个进程都是是通过4G的虚拟内存,用多少内存映射多少到内存区的方式来管理内存的,所以支持多进程,只要物理内存没爆,可以无限加进程。内存映射的最小单位是4096字节,可以是其倍数。

今天都是理论性的东西,看着有点懵,以后实践中还需慢慢体会。

 

posted on 2013-04-08 23:42  时光飞逝~  阅读(713)  评论(0)    收藏  举报