linux环境变量操作


《Unix环境高级编程》中第七章讲到,对环境变量进行操作的函数有:
putenv---取形式为“name=value”的字符串,将其放到环境表中。
setenv---将name设置为value。
unsetenv---删除name的定义。

并且有下列一段话:
注意putenv和setenv的区别。 setenv必须分配存储区 ,以便依据其参数创建“name=value”的字符串。同时, putenv则无需将传送给它的参数字符串直接放到环境中

我先问下,这个地方是不是说反了?

还有一个问题。
书上将增加一个字符串和修改一个现有的字符串要困难得多。环境表和环境字符串通常占用的进程地址空间的顶部,所以不能像高地址方向(向上)扩展;同时 不能移动在它之下的各栈帧,所以不能向低地址方向(向下)扩展 。两者组合使得该地址空间的长度不能再增加。

这个地方,为什么不能移动在它之下的各栈帧呢?

Linux c 操作系统

sodet 9 years, 11 months ago

setenv需要分配存储区而putenv不需要这个只是实现的问题,而且APUE解释也解释了,putenv之所以不需要分配是因为它存了一个指针,这就够了。
另外为什么不能移动栈帧呢?其实应该是这样的,因为环境变量这些值占据的是高地址的顶部,它的下面就是栈底,栈底是固定的这个有处理器决定,能移动的只是栈顶指针。

芙兰的果冻 answered 9 years, 11 months ago

Your Answer