Linux进程环境

Linux下C程序都是main开始的,main函数的原型是:数组

int main(int argc, char **argv)

其中argc是命令行参数的数目,argc是指向参数的各个指针所构成的数组。函数

 

进程终止

C程序中有3个函数用于正常终止一个进程,_exit和_Exit当即进入内核,exit则作一些清理工做后后进入内核,好比清理IO缓冲区数据,对于全部打开的流进行close操做。 这3个函数都带一个整型参数,成为终止状态。spa

#include <stdlib.h>
void exit(int status);
void _Exit(int status);
#include <unistd.h>
void _exit(int status);

 

atexit函数命令行

atexit函数用来登记终止处理函数,按照ISO C的规定,一个进程最多能够登记32个函数,这些函数将由exit函数自动调用。进程终止时,exit首先调用各终止函数,而后关闭打开的流。3d

#include <stdio.h>
int atexit(void (*func)(void));

使用atexit函数登记进程终止函数:指针

#include <stdio.h>

void my_exit1(void)
{
    printf("my_exit1\n");
}

void my_exit2(void)
{
    printf("my_exit2\n");
}

int main(int argc, char **argv)
{
    atexit(my_exit1);
    atexit(my_exit2);

    printf("hello world\n");

    return 0;
}

输出结果:code

 

进程环境表

每一个进程都有一个环境表,与参数表同样,环境表也是一个指针数组:对象

一般用getenv和putenv函数来访问特定的环境变量,而不是environ变量。可是,若是要查看整个环境,则必须使用environ指针。blog

 

C程序的存储空间

任何程序的内存空间均可分为4个基本部分,各个部分的首地址是固定的。进程

  • 正文段 这是CPU执行的机器指令部分
  • 数据段(初始化数据段/非初始化数据段)
  • 堆 一般在堆中动态分配存储
  • 栈 自动变量以及每次函数调用时所需保存的信息都存放在此段中

 

存储空间分配

C程序中有3个用于空间动态分配的函数:

  • malloc:分配指定字节数的存储区,此存储区的初始值不肯定。
  • calloc:为指定数量指定长度的对象分配存储空间,该空间每一位都初始化为0。
  • realloc:增长或减小之前分配区的长度,当增长长度时,若是该分配区后面有相邻的足够空间,则直接在后面的临近空间分配;不然将之前分配区的内容转移到另外一额足够大的区域中。
相关文章
相关标签/搜索