zoukankan      html  css  js  c++  java
  • Linux进程环境

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

    int main(int argc, char **argv)

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

    进程终止

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

    #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首先调用各终止函数,然后关闭打开的流。

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

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

    #include <stdio.h>
    
    void my_exit1(void)
    {
        printf("my_exit1
    ");
    }
    
    void my_exit2(void)
    {
        printf("my_exit2
    ");
    }
    
    int main(int argc, char **argv)
    {
        atexit(my_exit1);
        atexit(my_exit2);
    
        printf("hello world
    ");
    
        return 0;
    }

    输出结果:

    进程环境表

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

    通常用getenv和putenv函数来访问特定的环境变量,而不是environ变量。但是,如果要查看整个环境,则必须使用environ指针。

    C程序的存储空间

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

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

    存储空间分配

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

    • malloc:分配指定字节数的存储区,此存储区的初始值不确定。
    • calloc:为指定数量指定长度的对象分配存储空间,该空间每一位都初始化为0。
    • realloc:增加或减少以前分配区的长度,当增加长度时,如果该分配区后面有相邻的足够空间,则直接在后面的临近空间分配;否则将以前分配区的内容转移到另一额足够大的区域中。
  • 相关阅读:
    ssize_t与size_t的前世今生
    jQuery 中的事件参数传递机制
    链表的container_of 疑惑
    c 语言使用疑惑小记
    IQueryFilter的WhereClause详解
    给自己鼓励...
    什么是闭包,我的理解
    WCF 第五章 行为 为服务终结点行为实现一个消息检测器
    WCF 第五章 行为 事务之事务服务行为
    WCF 第四章 绑定 wsHttpBinding
  • 原文地址:https://www.cnblogs.com/luoxn28/p/6216080.html
Copyright © 2011-2022 走看看