进程环境

1.main() 函数和命令行参数

main()函数的原型

1 int main(int argc,char **argv);
2 
3 int main(int argc,char *argv[]);

argc表示命令行参数,argv指向各参数的数组。

C语言规定:argv[0] 为启动该程序的程序名.

ANSI和POSIX.1均规定argv[argc]必须为空指针。

 

2.进程终止

Linux有8种方式使进程终止(termination)。

1 :5种正常终止

     1)从main()返回:在main()中执行return 语句,可以将一个int值返回给程序调用者,一般是shell(系统调用者)。返回0表示程序正常终止,返回非0值表示程序异常终止。

     2)调用exit:main函数执行return语句相当于调用exit(3)函数,exit(3)函数是专门用于进程终止的,它依赖于_exit(2)或_Exit(2)系统调用。程序的任何地方执行exit(3)都终止退出,但return只有在main()中才会终止进程,在其他函数中执行return只会退出当前函数。

     3)调用_exit或_Exit:_exit(2) 和 _Exit(2) 函数都是系统调用,在程序中的任何地方调用它们程序都会立即结束。

     (1) return 、exit(3)、_exit(2) 和 _Exit(2) 的返回值取值范围是多少呢?

  (2) exit(3)、_exit(2) 和 _Exit(2) 之间有什么区别呢

     4)从最后一个线程从其启动例程返回:待定

     5)从最后一个线程调用pthred_exit.:待定

2.异常终止(文件不存在)

   1)调用abort;abort()在头文件#include <stdlib.h>。该函数产生SIGABRT信号并发送给自己,默认情况下导致程序终止不成功的终止错误代码(错误代码的缺省值是3)返回到主机环境。

   2)接受到一个信号:比如程序接收到 SIGINT(Ctrl+C) 信号就会结束,Ctrl + C 是 SIGINT 的一个快捷方式,而不是 Ctrl + C 触发了 SIGINT 信号。

   3)最后一个线程对取消做出反应:待定

3.atexit()函数

函数原型:

1 #include <stdlib.h>
2 
3 int atexit(void (*fun)(void));(void (*fun)(void))是一个无参无返回值得函数

atexit代码演练:

 1 #include <stdio.h>
 2 #inclue <stdlib.h>
 3 
 4 void f1(void)
 5 {
 6     puts("this is f1");
 7 
 8 }
 9 void f2()
10 {
11     puts("this is f2");
12 
13 }
14 void f3()
15 {
16     puts("this is f3");
17 
18 
19 }
20 void f4()
21 {
22     puts("this is f4");
23 
24 }
25 int main()
26 {
27     puts("Begin");
28 
29 
30     atexit(f1);  /* 把这些函数挂到钩子上,等到程序正常结束时,再逆序地取下来去执行。
31     atexit(f2);   *注意:程序正常结束时才会执行钩子函数,异常结束并不会执行。
32     atexit(f3);   *
33     atexit(f4);   */
34 
35     puts("End");
36 
37     exit(0);
38 }

结果:

1 Begin
2 End
3 this is f4
4 this is f3
5 this is f2
6 this is f1

4.环境表和环境变量

   1)什么是环境变量和环境表

     ...环境变量就是一个变量:name = value,可以通过name来访问value;环境变量是全局的

1 PATH=/usr/local/bin
2 name  value(字符串)

 

    ...环境表就是存放这些环境变量的表

历史上,大多数UNIX系统支持main函数带第三个参数,第三个参数为环境表。后来因为环境参数太好用了就独立出来了。 (全区变量environ)  

int main(int argc, char *argv[], char *envp[]);

 

                                   

 

5.C程序的存储空间布局

一个C程序由text、data、bss段组成:

1)text段:

                                                                                                                

  

 

 6.静态库和动态库(共享库)

动态库:

静态链接:
            gcc -static hello.c
            ls -lh a.out
            .......... 792K
动态链接:
             gcc hello.c
             ls -lh a.out
             ........ 8.1K    

 

 7.存储空间分配

 

 

 

8.函数setjump和longjmp

1 setjmp - save stack context for nonlocal goto
2 
3 #include <setjmp.h>
4 int setjmp(jmp_buf env);
5 
6 ongjmp, siglongjmp - nonlocal jump to a saved stack context
7 
8 #include <setjmp.h>
9 void longjmp(jmp_buf env, int val);

 

 

 

 

9函数getrlimit和setrlimit

函数原型:

1  getrlimit, setrlimit - get/set resource limits
2 
3 #include <sys/resource>
4 
5 int getrlimit(int resource, struct rlimit *rlptr);
6 
7 int setrlimit(int resource, const struct rlimit *rlptr);

 

 

 

 

posted @ 2018-08-11 11:42  看!前方  阅读(53)  评论(0)    收藏  举报