zoukankan      html  css  js  c++  java
  • 第7章 进程环境

    • main函数
    main函数之前会有一个特殊的启动程序,启动例程从内核取得命令行参数和环境变量。
    • 进程终止
    正常终止:
    1. 从main函数返回
    2. 调用exit
    3. 调用_exit或_Exit
    4. 最后一个线程从启动例程返回
    5. 最后一个线程调用pthread_exit
    异常终止:
    1. 调用abort
    2. 接到一个信号终止
    3. 最后一个线程对取消请求作出相应
    exit函数
    _exit和_Exit直接进入内核,exit则先执行一系列清理处理(调用终止处理程序,关闭所有标准io流),然后进入内核
    #include<stdlib.h>
    void exit(int status);
    void _Exit(int status);
    #include<unistd.h>
    void _exit(int status);
    status 终止状态
    atexit函数
    登记函数
    #include<stdlib.h>
    int atexit(void (*func)(void));
    exit调用这些函数的顺序与它们登记的顺序相反,登记多次也将执行多次
    • 命令行参数
    调用exec的进程可将命令行参数传递给该新程序。
    • 环境表
    extern char **environ;
    • C程序的存储空间布局
    正文段:cpu执行的机器指令部分。可共享
    初始化数据段:明确的赋初值的变量。
    非初始化数据段:bss段,任何程序外的C声明
    栈:自动变量以及每次函数调用时需要保存的信息
    堆:动态存储的分配
    size命令报告报告正文段/数据段/bss段
    • 共享库
    动态链接
    • 存储器分配
    #include<stdlib.h>
    void *malloc(size_t size);
    void *calloc(size_t nobj,size_t size);
    void *realloc(void *ptr,size_t newsize);
    void free(void *ptr);
    • 环境变量
    #include<stdlib.h>
    char *getenv(const char *name);
    应使用geienv函数获取指点环境变量的值,而不是直接使用environ。
    设置环境变量时只会影响当前进程及调用的子进程的环境,但不影响父进程的环境。
    #include <stdlib.h>
    int putenv(char *str);
    int setenv(const char* name,const char *value,int rewrite);
    int unsetenv(const char *name);
     
    putenv将字符串直接放到环境表中,如果是自动变量会出现错误,
    setenv分配存储区
    1. 修改现有的name
      • 如果新的value比原来的短或者相等,可以直接放到原来的存储区
      • 如果长,就需要malloc新的存储区
    2. 增加新的name
      • 如果是第一次,则需要分配新的环境表存储区,然后分配新的字符串存储区
      • 如果不是第一次了,就realloc环境表的存储区,然后直接分配新的字符串存储区就可以了。
    • setjmp和longjmp函数
    goto是不能跨越函数的,只能在函数内部蹦达
    #include<setjmp.h>
    int setjmp(jmp_buf env);
    void longjmp(jmp_buf env,int val);
    首先,用setjmp定位要跳到什么地方,setjmp返回的是longjmp第二个参数指定的数值,可以用来指定跳转意图。
    env一般声明为全局变量,存储调用longjmp时能用来恢复栈状态的所有信息。
    • getrlinmit和setrlimit函数
  • 相关阅读:
    RadAsm使用
    如何从外网访问内网
    装SQL server 2008问题解决
    820
    大三学生经验之谈
    ROM与RAM知识
    java mybatis学习一
    java Sprint boot 学习之一
    java读取配置到Hash表里
    数组乱序算法
  • 原文地址:https://www.cnblogs.com/wangtengxiang/p/4078026.html
Copyright © 2011-2022 走看看