码迷,mamicode.com
首页 > 系统相关 > 详细

进程环境

时间:2015-06-26 19:26:42      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

  这些天请假在家,正好可以研究一下UNIX高级编程,以前对高编也有写概念,知道些名词,什么标准I/O,进程,线程啥的,仅此而已。翻了些书本,知道进程入门分四个步骤:

进程环境,进程控制,进程关系,信号。今儿咱们就从第一步开始。

一 概述

  关于进程环境,主要对8个细节进行说明:

  1.程序执行是main函数如何被调用;

  2.命令行参数如何传送给可执行程序;

  3.进程的终止方式;

  4.存储器的经典布局;

  5.额外存储空间的分配方法;

  6.进程对环境变量的使用;

  7.longjmp和setjmp函数及它们与栈的交互作用;

  8.进程的资源限制;

二 细节说明

  1.main函数

    main函数的原型是:

       1 int main(int argc,char **argv,char **envp); 

      argc:命令行参数的数目;

      argv[]:指向命令行参数的 各个指针所构成的数组;

      envp[]:环境变量表;

      C程序总是从main函数开始执行。   

    内核执行C程序的顺序是:内核->调用一个exec->C启动例程->main;

    程序的其实地址:可执行文件将此启动例程指定为程序起始地址。这是由编辑连接器设置的,连接器由C编译器调用那个,也就是程序编译中,预处理 编译和链接中的链接过程。

    命令行参数获取:启动例程从内核取得命令行参数和环境变量的值,为按上述方式调用main做好准备。

  2.命令行参数

    下面两个demo显明了命令行参数的一些用法。

    

 1 /*************************************************************************
 2  File Name: cmd_line.c
 3  Author: wangshukun
 4  Mail: shuk.wang@hotmail.com 
 5  Created Time: Fri 26 Jun 2015 05:25:50 PM CST
 6 *************************************************************************/
 7 
 8 #include <stdio.h>
 9 
10 int main(int argc,char **argv,char **envp)
11 {
12     int i;
13 
14     for(i = 0;i < argc;i++)
15     {
16         printf("argv[%d] = %s.\n",i,argv[i]);
17     }
18 
19     for(i = 0;envp[i] != NULL;i++)
20     {
21         printf("envp[%d] = %s.\n",i,envp[i]);
22     }
23         return 0;
24 }

    argv[argc]为NULL,envp[last]也为NULL,所以程序亦可写成这样:

 1 /*************************************************************************
 2  File Name: cmd_line.c
 3  Author: wangshukun
 4  Mail: shuk.wang@hotmail.com 
 5  Created Time: Fri 26 Jun 2015 05:26:00 PM CST
 6 *************************************************************************/
 7 
 8 #include <stdio.h>
 9 
10 int main(int argc,char **argv,char **envp)
11 {
12     int i;
13 
14     for(i = 0;argv[i] != NULL;i++)
15     {
16         printf("argv[%d] = %s.\n",i,argv[i]);
17     }
18 
19     for(i = 0;envp[i] != NULL;i++)
20     {
21         printf("envp[%d] = %s.\n",i,envp[i]);
22     }
23         return 0;
24 }


  gcc cmd_line.c后生成a.out。运行./a.out a b c即可看到参数列表和环境变量表。

  3.进程终止方式

    

 

进程环境

标签:

原文地址:http://www.cnblogs.com/shuk-notes/p/4602870.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!