全部博文(71)
分类: LINUX
2008-04-15 20:59:17
四、进程空间
3.
名称:: |
malloc/calloc/realloc/free |
功能: |
allocate and free dynamic memory |
头文件: |
#include |
函数原形: |
void *calloc(size_t nmemb,size_t size); void *malloc(size_t size) void *realloc(void *ptr,size_t size); void free(void *ptr); |
参数: |
size 存储区大小 nmemb 指定的对象 ptr 指向存储区的指针 |
返回值: |
若成功则返回非空指针,否则返回NULL |
malloc分配制定字节的存储区,此存储区的初始值不能确定。
calloc为指定的对象分配能容纳其指定个数的存储空间。
realloc更改以前分配的存储区大小。
free释放分配的存储区。
realloc使我们可以增减以前分配区的长度。如果在该存储区后有主够的空间可供扩充,则可在原存储区位置上向高地址方向扩充,如果在原存储区没有足够的空间,则realloc分配另一个足够大的存储区。通常分配存储空间比实际的要大一些,额外的空间用来记录管理信息——分配块的长度。指向下一个分配块的指针等等。
4.
名称:: |
alloca |
功能: |
memory allocator |
头文件: |
#include |
函数原形: |
void *alloca(size_t size); |
参数: |
size 存储区大小 |
返回值: |
若成功则返回非空指针,否则返回NULL |
alloca也是用来分配存储空间的,它和malloc的区别是它是在当前函数的栈上分配存储空间,而不是在堆中。其优点是:当函数返回时,自动释放它所使用的栈。
环境变量顾名思义就是存储进程运行环境的变量.每个程序都接收到一张环境表。环境表是一个字符数组,其中每个指针包含一个以NULL结束的字符串的地址。全局变量environ则包含了该指针数组的地址。
下面列出一些环境变量。
COLUMNS 终端宽度 DATEMSK getdate模板文件路径名
HOME 起始目录 LANG 本地名
LC_ALL 本地名 LC_COLLATE 本地排序名
LC_CTYPE 本地字符分配名 LC_MESSAGES 本地消息名
LC_NUMERIC 本地货币编辑名 LC_TIME 本地日期/时间格式名
LINES 终端高度 LOGNAME 登陆名
NLSPATH 消息类模板系列 PATH 搜索可执行文件的路径前缀列表
PWD 当前工作目录的绝对路径 SGELL 用户首先的shell名
TERM 终端类型 TMPDIR 在其中创建临时文件的目录名
TZ 时期信息
五、进程的环境变量
5.
名称:: |
getenv |
功能: |
获取环境变量 |
头文件: |
#include |
函数原形: |
char *getenv(const char *name); |
参数: |
name 变量名 |
返回值: |
若成功则返回与name相关的value指针,否则返回NULL |
此函数返回一个指针,它指向name=value字符串的value。我们应当使用getenv从环境中取一个特定的环境变量值,而不是直接访问environ.
下面是一个例子。
/*7_3.c*/ #include main() { char *p; if((p=getenv(“USER”))) printf(“user=%s\n”,p); if((p=getenv(“PWD”))) printf(“pud=%s\n”,p); } |
运行结果为:
# .7_3 user=li pwd=/roor/peixun |
注意程序中的USER环境变量是系统用于用户自定义的环境变量。
6.
名称:: |
putenv |
功能: |
增加环境变量 |
头文件: |
#include |
函数原形: |
int putenv(const char *str); |
参数: |
str 变量名 |
返回值: |
若成功则返回0,否则返回非0 |
qutenv取形式为name=value的字符串,将其放到环境表中。如果name已存在则先删除其原来的定义。
*/7_4.c*/ #include main() { char *p; if((p = getenv(“USER”))) printf(“USER =%s\n”,p); putenv(“USER=test”); printf(“USER=%s\n”, getenv(“USER”)); } |
运行结果为:
#./7_4 USER=li USER=test |
程序先读用getenv取当前环境变量USER,然后用putenv增加USER=test的新环境变量,新的环境变量覆盖掉了原有的环境变量。
练习:向系统中添加一条环境变量USER1=root
7.
名称:: |
setenv |
功能: |
修改环境变量 |
头文件: |
#include |
函数原形: |
int setenv(const char *name,const char *value,int rewrite); |
参数: |
str 变量名 |
返回值: |
若成功则返回0,否则返回非0 |
setenv将name设置为value.如果在环境中name已经存在,那么
(1) 若rewrite非0,则首先删除其现存的定义;
(2) 若rewrite为0,则不删除其现存定义(name不设置为新的value,而且也不出错)。
下面是一个例子:
/*7_5.c*/ #include main() { if((p=getenv(“USER”))) printf(“USER=%s\n”,p); setenv(“USER”,”liuning”,0); printf(“rewrite=0\n”); printf(“USER=%s\n”,getenv(“USER”)); setenv(“USER”,”liuning”,1); printf(“rewrite!=0\n”); printf(“USER=%s\n”,getenv(“USER”)); } |
下面是运行结果:
# ./7_5 USER=li rewrite=0 USER=li rewrite!=0 USER=liuning |