linux编程基础

 

stdin,stdout,stderr通过文件描述符来访问,文件描述符0代表stdin,1代表stdout,2代表stderr。
% program > output_file.txt 2>&1
% program 2>&1 | filter
这里2>&1表示stderr和stdout合并输出。它必须跟在文件重定向符后面(如第一个例子),或者在pipe重定向前面(如第二个例子,没搞懂)。

程序退出后,返回值会报存在 $? 中。通过echo $?来显示。

linux中的环境变量
USER  包含用户名
HOME  包含当前用户home目录的路径
PATH  包含分号分隔开的目录列表,linux通过搜索这个列表来查找用户在终端中输入的命令。
DISPLAY 包含X window的名字和号??不知道干啥用的,以后再说。
用export可以修改环境变量,例如 % export EDITOR=emacs
在程序中可以通过<stdlib.h>中的getenv函数来获取环境变量。setenv和unsetenv可以用来设置和清除环境变量。

对于性能关键代码,assert这种运行时的检查会导致较大的性能损失。此时,我们可以用-NDEBUG宏来编译代码。由于assert可能被宏关闭,因此避免在assert中引入影响正常程序的操作,例如++运算。另外,不要使用assert来测试用户的异常输入。用户不希望看到错误输入直接导致程序崩溃。比较适合使用assert的地方如下:
1.检查空指针;2.检查函数入参是否合理。

包含静态库时,需要按照依赖关系列出。
如果app.o使用了-ltest库中的函数,那么编译时就应该写为:
gcc -o app app.o -L. -ltest
而不应该写为
gcc -o app -L -ltest app.o

共享库和静态库都是一个obj文件的组合。区别在于:
静态库是在编译时载入的,共享库是在运行时载入的。
静态库加载时只会把需要的部分加载进来(.a中包含多个.o时);共享库的.o文件都组合成一个单个的obj文件,一旦载入时只能全部载入。
最核心的差别在于,静态库在被加载后,就与加载者合为一体;而共享库被加载后,加载者并不拥有共享库的obj文件,只是获得了一个调用接口。因此共享库的一套obj可以同时被多个程序调用,自始至终obj只有一套;而静态库只能被多个程序加载,加载完成后每个程序都有一份静态库的obj。

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值