进程环境详解(三)---环境表

  启动代码除了会将命令行参数传递给 main 外,还会从内核中获取到一张环境表。该环境表是由全局变量 environ 来指向的。environ 的类型定义如下:

extern char ** environ; /* 这个定义在 unistd.h 头文件中 */

=====================================================

但是在实际测试当中,使用environ指针的时候却报错了,如下图所示

于是去 unistd.h 头文件中查看 environ 的原始定义,如下图所示

从该头文件可以看出,要想使用 environ 变量,需要实现定义 __USE_GNU 宏,而默认系统中是没有定义该宏的,于是在源程序中改用 __environ 变量代替 environ 变量或者在程序一开始声明environ这个变量就可以解决了。

============================================================

  使用 environ 变量查看环境变量的方法只能一次性查看所有的环境变量,因为我们并不知道具体一个环境变量的位置。如果我们想要知道一个具体环境变量的值,我们应该使用 getenv 函数。

时间: 2024-12-11 00:19:17

进程环境详解(三)---环境表的相关文章

Linux系统环境搭建SVN服务器环境详解

Linux系统环境搭建SVN服务器环境详解: 本篇文章主要介绍的内容是在Linux系统下如何搭建SVN服务器的,目的是为了很好的实现代码版本控制管理,具体如下所示介绍: 一.安装需要的软件包 #yum install subversion     ---安装SVN服务工具 #yum install httpdmod_dav_svn mod_perl    ---用于支持WEB方式管理SVN服务 #yum install wgetmake unzip perl*       ---必备的软件包 二

Object-C 入门 Xcode 环境详解 HelloWorld 程序

作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/38424965 一. Xcode 环境安装 与 工程创建 1. 下载环境 相关资源下载 : -- IOS 相关资料下载页面 : https://developer.apple.com/devcenter/ios/index.action ; -- Xcode 下载页面 : https://developer.apple.com/xcode/downloads/

linux进程地址空间详解(转载)

linux进程地址空间详解(转载) 在前面的<对一个程序在内存中的分析 >中很好的描述了程序在内存中的布局,这里对这个结果做些总结和实验验证.下面以Linux为例(实验结果显示windows上的结果也一样). 我们还是利用前面看到过的这个图,如下图:32位X86机器的内存布局图,内存主要分为栈.堆.BSS段.数据段.代码段5个段.   代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域.这部分区域的大小在程序运行前就已经确定,并且内存

Linux01-Linux进程管理详解44

一.进程    1.进程属性: a)进程状态 b)父子关系 c)优先级关系 0-139用户优先级,数字越小优先级越高: 0-99:内核调整的 100-139:用户可控制 nice值: -20-19 100-139 普通用户仅能够调大自己的进程的Nice值: 2.进程优先级 a)衡量面对不同的算法时,程序的性能如何,O标准(坐标轴表示): O(1) O(n) O(logn) O(n^2) O(2^n) b)每个进程的PID都是唯一的: init: 进程号为1 3.进程的分类: 跟终端相关的进程 跟

WebSocket安卓客户端实现详解(三)–服务端主动通知

WebSocket安卓客户端实现详解(三)–服务端主动通知 本篇依旧是接着上一篇继续扩展,还没看过之前博客的小伙伴,这里附上前几篇地址 WebSocket安卓客户端实现详解(一)–连接建立与重连 WebSocket安卓客户端实现详解(二)–客户端发送请求 终于是最后一篇啦,有点激动\ ( ≧▽≦ ) /啦啦啦, 服务端主动通知 热身完毕,我们先回顾下第一篇中讲到的服务端主动通知的流程 根据notify中事件类型找到对应的处理类,处理对应逻辑. 然后用eventbus通知对应的ui界面更新. 如果

spark2.x由浅入深深到底系列六之RDD java api详解三

学习任何spark知识点之前请先正确理解spark,可以参考:正确理解spark 本文详细介绍了spark key-value类型的rdd java api 一.key-value类型的RDD的创建方式 1.sparkContext.parallelizePairs JavaPairRDD<String, Integer> javaPairRDD =         sc.parallelizePairs(Arrays.asList(new Tuple2("test", 3

小甲鱼PE详解之输入表(导出表)详解(PE详解09)

小甲鱼PE详解之输出表(导出表)详解(PE详解09) 当PE 文件被执行的时候,Windows 加载器将文件装入内存并将导入表(Export Table) 登记的动态链接库(一般是DLL 格式)文件一并装入地址空间,再根据DLL 文件中的函数导出信息对被执行文件的IAT 进行修正. ( 基础补充:很多朋友可能看到这里会有点懵,各位看官请允许小甲鱼啰嗦一下,照顾初学者.我们都明白Windows 在加载一个程序后就在内存中为该程序开辟一个单独的虚拟地址空间,这样的话在各个程序自己看来,自己就拥有几乎

php学习之道:WSDL详解(三)

通过声明方式定义绑定(binding)属性 如果你在服务中采用SOAP binding,你可以使用JAX-WS来指定一定数量的属性binding.这些属性指定对应你在WSDL中指定的属性.某些设置,比如参数类型,可以约束你实现的方法,这些设置也影响声明的效用. @SOAPBinding声明,定义在javax.jws.soap.SOAPBinding接口中.它提供发布时的SOAP Binding细节.如果@SOAPBinding没有被指定,则用缺省的doc/literal SOAPBinding.

UINavigationController详解三(转)ToolBar

原文出自:http://blog.csdn.net/totogo2010/article/details/7682641,特别感谢. 1.显示Toolbar  在RootViewController.m的- (void)viewDidLoad方法中添加代码,这样Toobar就显示出来了. [cpp] view plaincopy [self.navigationController  setToolbarHidden:NO animated:YES]; 2.在ToolBar上添加UIBarBut