【unix高级环境编程】1.进程环境笔记1

1.main函数

main函数原型: int main (int argc , char * argv [ ]);
argc----参数个数 ;argv--- 是指向各个参数的指针所构成的数组---后续可以成为指针数组。可以见c与指针中讲解一般最后的指针是一个NULL指针。unix系统是最后加一个NULL指针的。


2.进程终止

8种方式终止进程环境
正常终止的5种方式:1.main函数返回;2.调用exit函数 ;3.调用_EXIT和_exit函数 ;4.最后一个线程从启动项返回;5.最后一个线程调用pthread_exit; 
异常终止的3种方式: 1. 调用abort;2. 由一个信号终止 (见第10章)。

3.终止进程函数(exit系列)

#inclde stdlib.h
void exit (int status)
void  _EXIT(int status)
#include <unistd.h>
void  _exit(int status)

_exit和_EXIT直接进入内核,exit则先进行清理工作,关闭文件流,然后进入内核----实际执行I/O清理关闭,对打开流执行fclose函数。

4.终止处理程序---atexit函数

#include<stdlib.h>
int atexit ( void  (*func)(void) ) 成功返回0,失败返回-1`

需要解释一下这里的 void (*func)(void) ---实际一个指向函数的指针---也就是一个函数的入口地址,这里是与数组例如 a[ ]的入口地址是 a ,那么函数的入口地址可以看作是func 。
这里需要向atexit函数传递一个函数的入口地址,与函数的参数无关。
终止处理程序调用的顺序与他们登记时候相反,就是逆向执行进程。例如调用函数时候可以逆向的执行。

5.一个c程序究竟是如何启动的

  内核使程序执行的唯一方法是调用一个 exec(执行函数execute)函数。进程自愿终止的唯一方法是显式或隐式地(调用exit)调用_exit。进程也可非自愿地由一个信号使其终止。

6.环境表

a.环境表实际是字符指针数组,每一个指针都包含一个null结束的字符串地址,全局变量`extern char **environm是该指针数组的地址`
b.environ-----环境指针;指针数组----环境表 ;各指针指向的字符串----环境字符串;
补充上图片表示

7.c程序的存储空间布局

命令行参数/环境变量,正文段---------数据段(初始化的赋值)----------非初始化段----------栈(自动变量以及函数调用值保存)----------堆(动态内存分配)

8.存储器分配

#include<stdlib.h>
void * malloc (size_t size);
void *calloc (size_t nobj,size_t size )
void free (void *ptr)

前两个函数均返回一个指针,如果出错则返回NULL指针;因为是void* 类型所以说返回值可以是任意类型 如 `int *malloc()`

9环境变量
一般可以设置获取环境变量的函数

char *getenv(const  char* name);返回值是指向name字符串的指针,出错则返回NULL




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值