zoukankan      html  css  js  c++  java
  • [07]APUE:进程环境

    [a] exit / _Exit / _exit

    #include <stdlib.h>
    void exit(int status)
    void _Exit(int status)
    #include <unistd.h>
    void _exit(int status) 
    • exit 在终止进程之前会调用 fflush 及 fclose
    • 类 UNIX 平台上,_Exit 与 _exit 相同,直接终止进程而不做清理工作

    [b] atexit

    #include <stdlib.h>
    int atexit(void (*func) (void)) //成功返回0,出错返回非 0 
    • 进程正常终止前执行的函数,无返回值无参数,执行順序与声明順序相反 

    [c] malloc / calloc/ realloc /free

    #include <stdlib.h>
    void *malloc(size_t size)
    void *calloc(size_t nobj, size_t size)
    void *realloc(void *ptr, size_t newsize)
    //成功返回指针,出错返回 NULL
    void free(void *ptr) 
    • malloc 在 FreeBSD 中的实现为 jemalloc
    • calloc 分配的空间大小为 nobj × size,分配的空间会初始化为 0
    • realloc 中 newsize 指重新分配的最终空间大小,不是新、旧存储区长度之差,第一个参数若指定为 NULL,则与 malloc 功能相同

    [d] getenv

    #include <stdlib.h>
    char *getenv(const char *name) //成功匹配返回字符串指针,否则返回 NULL 
    • 获取指定环境变量的值
    • 若要查看所有环境变量,需要使用全局变量 extern char **environ  

    [e] setenv / unsetenv

    #include <stdlib.h>
    int setenv(const char *name, const char *value, int rewrite)
    int unsetenv(const char *name)
    //成功返回 0,出错返回 -1 
    • 用于设置环境变量,若 rewrite 为 0,则不更新现有定义,若为非 0,则覆盖现有定义
    • 仅作用于进程及其子进程环境,不影响 shell 环境

    [f] setjmp / longjmp

    #include <setjmp.h>
    int setjmp(jmp_buf env) //若直接调用,返回 0,若从 longjmp 返回,则为非 0
    void longjmp(jmp_buf env, int val) 
    • 用于跨函数跳转,goto 用于函数内跳转
    • jmp_buf 类型的变量 env 用于保存调用 setjmp 时的环境信息,由 setjmp 写入,longjmp 使用,val 用于指定从longjmp 跳转时,setjmp 的返回值 
    • 若要保证跳转之后各变量恢复至初始状态,需要使用 volatile 关键字修饰变量,以免受编译器优化影响

    [g] getrlimit / setrlimit

    #include <sys/resource.h>
    int getrlimit(int resource, struct rlimit *rlim)
    int setrlimit(int resource, const struct rlimit *rlim)
    //成功返回 0,出错返回非 0 
    struct rlimit {
        rlim_t    rlim_cur; //软限制
        rlim_t    rlim_max; //硬限制
    • resource 的常用取值:
      • RLIMIT_FSIZE:进程可以创建的文件的最大字节长序
      • RLIMIT_NOFILE:进程能打开的文件数量上限
      • RLIMIT_STACK:栈的最大字节长度
      • RLIMIT_NICE:nice 的最大值
    • 常量 RLIM_INFINITY 表示该条目无限制
  • 相关阅读:
    【01】国内外git托管平台(总结by魔芋)
    【01】git下载和安装的完整过程
    分享一些正确的放松方式
    【03】图解原型和原型链by魔芋
    求一个正整数的阶乘
    乘法表
    Web Best Practices
    【03】const
    【02】块级作用域
    【01】let和const命令
  • 原文地址:https://www.cnblogs.com/hadex/p/6128433.html
Copyright © 2011-2022 走看看