进程环境之环境表【转】

本文转载自:http://www.cnblogs.com/nufangrensheng/p/3507968.html

每个程序都会接收到一张环境表。与参数表一样,环境表也是一个字符指针数组,其中每个指针包含一个以null结束的C字符串的地址。全局变量environ则包含了该指针数组的地址:

extern char **environ;    要在程序中使用全局变量environ时,需要用该语句作变量声明。extern指示environ在其他文件中已定义,要在本文件中使用。

例如,如果该环境包含5个字符串,那么它看起来可能如图7-2所示。其中,每个字符串的结尾处都显示地有一个null字符。我们称environ为环境指针(environment pointer),指针数组为环境表,其中各指针指向的字符串为环境字符串。

按照惯例,环境由

name=value

这样的字符串组成,这与图7-2中所示相同。大多数预定义的名字完全由大写字母组成,但这只是一个惯例。

在历史上,大多数UNIX系统支持main函数带有三个参数,其中第三个参数就是环境表的地址:

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

因为ISO C规定main函数只有两个参数,而且第三个参数与全局变量environ相比也没有带来更多益处,所以POSIX.1也规定应使用environ而不使用第三个参数。

通常用getenv和putenv函数来访问特定的环境变量,而不是用environ变量。但是,如果要查看整个环境,则必须使用environ指针。

本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/

时间: 2024-08-27 01:29:31

进程环境之环境表【转】的相关文章

linux进程(1)--进程运行的环境

linux进程(1)–进程运行的环境 标签(空格分隔): linux 以下内容来自<UNIX环境高级编程>读书笔记 前引 首先想想下面几个问题能不能解答: 当程序被执行的时候,main函数时如何被调用的? 程序在内存的存储空间布局是怎样的? 命令行参数时如何传递给新程序的?进程如何读取环境变量? 进程堆空间的使用 进程的终止方式 进程是程序执行的基本,进程即为程序执行的活动体.下面是进程在系统上运行的一些环境. 一.main函数 int main(int argc, char *argv[])

cmake 常用变量和常用环境变量查表手册

cmake 常用变量和常用环境变量查表手册 一,cmake 变量引用的方式: 前面我们已经提到了,使用${}进行变量的引用.在 IF 等语句中,是直接使用变量名而不通过${}取值 二,cmake 自定义变量的方式: 主要有隐式定义和显式定义两种,前面举了一个隐式定义的例子,就是 PROJECT 指令,他会隐式的定义<projectname>_BINARY_DIR 和<projectname>_SOURCE_DIR 两个变量.显式定义的例子我们前面也提到了,使用 SET 指令,就可以

OGG进程拆分(单表拆成多个进程)

OGG进程拆分(单表拆成多个进程) 概要: <OGG进程拆分>介绍了如何将一个入库进程中的多个表拆分到其他进程中.本篇将着重介绍如何使用多个进程同时入库一张表. 适用条件: 1)入库进程只同步一张表,但仍有延时 2)目标段主机CPU.内存压力不大,以便有足够的资源添加新的入库进程 本示例将RZG_CXI2中的HX_SB.SB_CWBB_XQYKJZZ_ZCFZB表拆分到RZG_CXI1-RZG_CXI8这8个进程中 1. 创建新添加进程的配置文件 edit  params RZG_CXI1 #

十九、Linux 进程与信号---环境表

19.1 环境表 19.1.1 介绍 这是启动例程的第二各作用,搜集环境表,然后传递给主函数. 环境表就是一个指针数组.      环境表 每个进程都有一个独立的环境表 初始的环境表继承自父进程 主函数可以带三个参数,第三个参数则是环境表,可以通过第三个参数获取环境参数,也可以通过外部全局变量来定义环境表,extern char **environ. 设置的环境变量只影响当前进程的,不为全局的 19.1.2 例子 (1)通过 main 函数获取 1 #include <stdio.h> 2 #

锁_rac环境kill锁表会话后出现killed状态(解决)

原创作品,出自 "深蓝的blog" 博客,深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46876961 rac生产库杀掉锁表会话出现killed状态处理 环境: 操作系统:CentOS 6.4 64BIT 数据库:Oracle RAC 11.2.0.4 R2 64bit 在某项目中,进行大数据抽取任务时,抽取出现错误,需要对大表进行重新抽取.于是取消insert操作,然后执行truncate操作. 如下,报错了,提

生产环境修改PostgreSQL表索引对应的表空间

通过iostat命令发现某块磁盘的io使用率经常保持在100%,通过blkid命令获取linux raid存储盘符和挂载点的关系后,最后发现是挂载点上的一个数据库表空间在占用大io. 现象 [email protected]:~$ iostat -xm 3 |grep -v dm avg-cpu:  %user   %nice %system %iowait  %steal   %idle           11.68    0.00    3.82    8.63    0.00   75.

【第一天】django快速开发——环境部署、表单、数据库操作、模板、文件学习

安装django 1.安装 setuptools yum install python-setuptools 2.完成之后,就可以使用 easy_install 命令安装 django easy_install django 注意:django对于pip和setuptools的版本有严格要求,如果不想那么麻烦建议直接装个python3.6 django管理命令 django-admin.py 这是django的管理命令,无论在哪个目录都可以用这个命令来对project或app做操作 最常用的命令

浅析Windows环境下堆表的空闲双向链表结构

实验环境: 操作系统: Windows 2000 Service Pack 4 集成开发环境: Microsoft Visual C++ 6.0 SP6 实验代码如下: 1 #include <windows.h> 2 #include <stdio.h> 3 4 int main(int argc, char **argv) 5 { 6 HLOCAL h1, h2, h3, h4, h5, h6; 7 HANDLE hp; 8 hp = HeapCreate(0, 0x1000,

CreateProcessWithLogonW(好像可以指定进程的上下文环境)

Creates a new process and its primary thread. Then the new process runs the specified executable file in the security context of the specified credentials (user, domain, and password). It can optionally load the user profile for a specified user. The