[读书笔记] APUE | 第七章 | 进程环境

本文详细探讨了进程环境,包括main函数的参数解析,进程如何终止,特别是环境表和环境变量的使用。主要介绍了getenv, putenv, setenv以及unsetenv等函数在操作环境变量时的作用和原理,阐述了如何修改和管理进程的环境表。" 113268749,10544587,金融级MySQL高可用方案探讨,"['金融系统', '数据库管理', 'MySQL', '高可用架构', '故障恢复']
摘要由CSDN通过智能技术生成

1. main函数

main函数的原型是

int main(int argc,char * argv[],char *envp[]);

argc是命令参数个数,argv指向参数的各个指针所构成的数组,envp里存放的就是环境变量。当内核执行程序时,在调用main前先调用一个特殊的启动例程。可执行文件将此启动例程指定为程序的起始地址,这是由连接器设置的,连接器由编译器调用。

2. 进程终止

在之前的linux学习里,介绍了进程终止,这里只是查漏补缺。
正常终止:

  • 从main返回
  • 调用exit
  • 调用_exit或_Exit
  • 最后一个线程从启动例程返回
  • 最后一个线程调用pthread_exit
    异常终止:
  • 调用abort
  • 接到终止信号
  • 最后一个线程对取消请求做出响应
    而刚才提到的启动例程其实就是从main返回立即调用exit。

3. 环境表

其实环境表就是main函数的第三个参数,如果想访问环境变量,用getenv和putenv函数即可。

3.1 环境变量

用下面的函数就可以获取环境表中的环境变量:

#include<stdlib.h>
char *getenv(const char*name);

这个函数返回了的指针指向了name存储的val
而需要设置环境变量的话,需要下面的三个函数:

#include <stdlib.h>
int putenv(char *string);
int setenv(const char *name, const char *value, int overwrite);
int unsetenv(const char *name);

putenv函数是取形式为name = value的字符串,将其放到环境表,如果name已经存在,则删除原来的定义。
setenv函数是设置name为value,如果name存在,且overwrite部位0,则删除原来的定义,否则不删除。
unsetenv是删除name的定义。
那么修改函数环境表时是如何操作的?

  • 修改一个现有的name
    如果value长度小于等于现有的长度,直接插入修改,否则需要malloc为新字符串重新分配空间,然后将新字符串复制到该空间,并让name指向新分配区域。
  • 增加一个新name
    如果是第一次添加新的name,调用malloc为新的表开辟空间,将原来的环境表复制到新分配区域,并将指向name的指针放到表尾,并放置NULL指针在其后。
    如果不是第一次添加新的name,则需要调用realloc,后续操作和上面的一样。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值