zoukankan      html  css  js  c++  java
  • Apue.2e Chapter7

    本章学习进程环境,主要是一些编译器、系统与程序直接的结合等方面的知识。

    常识部分略过,记录一些要点。

    main中return语句实质上仍然调用exit函数。

    使用atexit函数注册返回回调函数,其注册顺序与实际调用顺序相反。

    环境变量相关:

    全局变量environ可以直接读取环境变量表,函数getenv,setenv,putenv和unsetenv可以用来操作环境变量。

    #include <stdlib.h>

    char *getenv(const char *name);

    int putenv(char *str);

    int setenv(const char *name,const char *value, int rewrite);

    int unsetenv(const char *name);

    这些函数是进程相关的,不能改变父进程的环境变量。

    虽然这些函数被定义到标准库中,但是实际上标准声明环境的内容是由实现定义的…

    注意putenv的参数不能定义在栈中,而应该是静态数据。

    一般环境表被定义在进程存储空间的栈顶部,修改环境变量会引起进程空间布局的变化。

    如果修改后的字符串无需更大的空间,一切好说;如果需要,新字符串就会放在heap中(因为stack中无法扩展了)。

    存储器分配:

    这一部分和win下基本一致,包括.text, .data, .bss, heap, stack这几部分。

    malloc系函数(一般通过sbrk系统调用实现)返回的指针是严格对齐的,但是多数情况下其分配的存储空间要比申请的大一些,多余的部分用于存放管理信息。因此超出末端的写操作会毁坏这些信息,造成严重破坏。

    其他:alloca函数也可以用来申请空间,但是新的空间是在stack上分配的,无需自己free(但是不是所有系统都有这个函数);

    异常处理:

    C语言没有异常,可以使用setjmp和longjmp组成简单的异常处理机制(但不适用用大型程序架构),这一部分在CII一书中有较好的实现。

    资源限制:

    //SUS

    #include <sys/resource.h>

    int getrlimit(int resource, struct rlimit *rlpter);

    int setrlimit(int resource, const struct rlimit *rlpter);

    struct rlimit{

        rlim_t rlim_cur;        //软限制:当前限制

        rlim_t rlim_max;    //硬限制:最大限制

    };

    软限制必须小于等于硬限制,硬限制提高需要su权限。

    资源限制会被所有子进程继承。

  • 相关阅读:
    js window对象属相和方法相关整理资料
    js中把字符串转换成number格式方法
    oracle中CAST函数使用简介【转】
    Oracle使用SQL语句修改字段类型
    @GeneratorValue与@GenericGenerator注解使用心得
    @Column 注解详情
    Spring中的注入方式 和使用的注解 详解
    maven教程
    wxpyhon 对话框
    wxpython 按钮等事件的触发
  • 原文地址:https://www.cnblogs.com/livewithnorest/p/2868795.html
Copyright © 2011-2022 走看看