ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

unix高级编程--2(进程环境)

2021-12-22 09:35:14  阅读:196  来源: 互联网

标签:-- 编程 statval regival char int unix exit autoval


一、终止方式

正常终止:1、从main返回2.调用exit 3.调用_exit或_Exit 4.最后一个线程从启动例程返回 5.最后一个线程调用pthread_exit
异常终止:1、调用abort 2.接到一个信号 3.最后一个线程对取消做出响应
其中main函数返回一个整型值与调用exit等价,都会执行一个标准I/O库得清理关闭操作,对所有打开的流调用fclose函数

二、系统退出时自动调用函数atexit

一个进程可以登记多至32个函数,这些函数在exit时调用
int atexit(void(*func)(void));
调用顺序与注册顺序相反,同一函数可以注册多次

三、环境变量

每个进程都接收到一张环境变量表,都存在全局变量 extern char** environ,用于存储进程得环境表内容
环境变量函数
char* getenv(const char* name);
int putenv(char* str) 说明:str为name=value得形式
char* setenv(const char* name, const char* value, int rewrite);rewrite为非0则重写,
char* unsetenv(const char* name);


四、c程序存储空间布局


正文段:cpu执行得机器命令部分。
初始化得数据:数据段,包含文件中显示得赋初值得变量。例如int max=30;
未初始化得数据:bss段,包含函数外未赋值得变量。例如int max;由内核同意赋值为0

 

五、存储空间分配函数 malloc calloc realloc函数跳转setjmp,longjmp

参照如下demo

static jmp_buf    jmpbuffer;
static int        globval;

int main(void)
{
    int                autoval;
    register int    regival;
    volatile int    volaval;
    static int        statval;

    globval = 1; autoval = 2; regival = 3; volaval = 4; statval = 5;

    if (setjmp(jmpbuffer) != 0) {
        printf("after longjmp:\n");
        printf("globval = %d, autoval = %d, regival = %d,"
            " volaval = %d, statval = %d\n",
            globval, autoval, regival, volaval, statval);
        exit(0);
    }

    /*
     * Change variables after setjmp, but before longjmp.
     */
    globval = 95; autoval = 96; regival = 97; volaval = 98;
    statval = 99;

    f1(autoval, regival, volaval, statval);    /* never returns */
    exit(0);
}

static void f1(int i, int j, int k, int l)
{
    printf("in f1():\n");
    printf("globval = %d, autoval = %d, regival = %d,"
        " volaval = %d, statval = %d\n", globval, i, j, k, l);
    f2();
}

static void f2(void)
{
    longjmp(jmpbuffer, 1);
}


说明:
setjmp,指定调转位置
longjmp ,开始跳转,第二个参数为setjmp得返回值
longjmp跳转后,静态变量和全局变量得值保持不变,自动变量和寄存器中得变量不确定,因此需要指定为volatite得属性

六、获取和设置进程限制信息 getrlimit和setrlimit

标签:--,编程,statval,regival,char,int,unix,exit,autoval
来源: https://blog.csdn.net/liyuanba2dai/article/details/122077604

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有