错误处理
1、通过函数返回值表示错误
返回值合法表示成功,非法表示失败
返回有效指针表示成功,空指针(NULL/0xffffffff)表示失败
返回0表示成功,-1表示失败。
永远成功,printf
2、通过errno表示错误
errno是一个全局变量,它的声明在errno.h文件中,它的值随时可能发生变化。
可以将它转换成有意义的字符串,strerror(errno) <=>perror("msg")
注意:在函数执行成功的情况下,不会修改errno的值。
因此不能以errno的值不等于0就判断函数执行出错了。
所以通常会和函数的返回值配合,通过返回值判断是否出错,而通过perror查询出了什么类型的错误。
环境变量
以字符串形式存在的,绝大多数记录的是路径信息,它表示了当前操作系统的资源配置,以及环境设置等相关信息。
1、环境变量表
每个程序运行时,操作系统都会把所有的环境变量记录到一张表中,传给程序。
#include<stdio.h>
int main(int argc,char* argv[],char* environ[])
{
for(int i=0;environ[i];i++)
{
printf("%d %s\n",i,environ[i]);
}
}
2、环境变量函数
char* getenv(const char *name);
功能:根据环境变量名,获取环境变量的值。
int putenv(char *string);
功能:以name=value形式设置环境变量,如果环境变量存在则更新,不存在则添加。
返回值:成功返回0,失败返回-1
int setenv(const char *name,const char *value,int overwrite);
功能:设置name环境变量的值为value,name不存在则更新,如果name存在且overwrite不为0则更新,否则不变。
int unsetenv(const char *name);
功能:从环境变量表中删除name
int clearenv(void);
功能:清空环境变量表。
注意:操作系统记录的环境变量的数据记录一块特殊的存储空间,而在程序自己添加的环境变量需要自己准备存储空间。
注意:对于环境变量的修改,只能影响自己,不能影响别人。
内存管理
自动分配/释放内存auto_ptr STL 调用标准C++中的new/delete
new/delete 构造/析构 C++ 标准C中的malloc/free
malloc/free 标准C 调用POSIX
brk/sbrk POSIX 调用Linux系统接口
mmap/munmap Linux 调用内核接口
kmalloc/vmalloc 内核 调用驱动
get_free_page 驱动 ......
进程映像
程序是保存在磁盘上的可执行文件,加载到内存中被操作系统调用执行的程序叫进程(一个程序可以被同时执行多次形成身份不同的进程)。
进制在内存空间中的分布情况叫进制映像,从低地址到高地址依次排列的是:
代码段/只读段:
二进制指令、字符串字面值、具有const属性且被初始化过的全局、静态变量。
数据段:被初始化过的全局变量和静态变量。
BSS段:没有初始化过的全局变量和静态变量,进程一旦加载成功就会把这段内存清理为零。
堆:动态的分配、管理,需要程序员手动操作。
栈:非静态的区部变量,包括函数的参数、返回值。
从高地址向低地址使用,和堆内存之间存在一段空隙。
命令行参数及环境变量表:命令行参数、环境变量