Linux进程环境

以下内容全部摘自UNIX环境高级编程(第3版)

退出函数

3个函数用来正常终止一个程序:_exit和_Exit立即进入内核,exit则先执行一些清理处理,然后返回内核。

#include <stdlib.h>
void exit(int status);
void _Exit(int status);
#include <unistd.h>
void _exit(int status):

存储空间分配

ISO C说明了3个用于存储空间动态分配的函数。
1. malloc,分配指定字节数的存储区。此存储区中的初始值不确定。
2. calloc,为指定数量指定长度的对象分配存储空间。该空间中的每一位(bit)都初始化为0.
3. realloc,增加或减少以前分配区的长度。当增加长度时,可能需将以前分配区的内容移到另一个足够大
的区域,以便在尾端提供增加的存储区,而新增区域内的初始值则不确定。

#include <stdlib.h>
void *malloc(size_t size);
void *calloc(size_t nobj, size_t size);
void *realloc(void *ptr, size_t newsize);
3个函数返回值:若成功,返回非空指针;若出错,返回NULL
void free(void *ptr);

环境变量

ISO C定义了一个函数getenv,可以用其取环境变量值

#include <stdlib.h>
char *getenv(const char *name);
返回值:指向与name关联的value的指针;若未找到,返回NULL

我们应当使用getenv从环境中取一个指定环境变量的值,而不是直接访问environ

#include <stdlib.h>
int putenv(char *str);
函数返回值:若成功,返回0;若出错,返回非0
int setenv(const char *name, const char *value, int rewrite);
int unsetenv(const char *name);
两个函数返回值:若成功,返回0;若出错,返回-1

这三个函数的操作如下:
* putenv取形式为name=value的字符串,将其放到环境表中。如果name已经存在,则先删除其原来的定义
* setenvname设置为value。如果在环境中name已经存在,那么:
1. 若rewrite非0,则首先删除其现有的定义
2. 若rewrite为0,则不删除其现有定义(name不设置为新的value,而且也不出错)。
* unsetenv删除name的定义。即使不存在这种定义也不算出错。

函数setjmp和longjmp

#include <setjmp.h>
int setjmp(jmp_buf env);
返回值:若直接调用:返回0;若从longjmp调用,则为非0
void longjmp(jmp_buf env, int val);

函数getrlimit和setrlimit

每个进程都有一组资源限制,其中一些可以用getrlimitsetrlimit函数查询和更改。

#include <sys/resource.h>
int getrlimit(int resource, struct rlimit *rlptr);
int setrlimit(int resource, const struct rlimit *rlptr);
两个函数返回值:若成功,返回0;若出错,返回非0

对这两个函数的每一次调用都制定一个资源以及一个指向下列结构的指针。

struct rlimit {
    rlim_t rlim_cur;        /* soft limit: current limit */
    rlim_t rlim_max;        /* hard limit: maximum value for rlim_cur */
};

在更改资源限制时,须遵循下列3条规则。
1. 任何一个进程都可将一个软限制值更改为小于或等于其硬限制值。
2. 任何一个进程都可降低其硬限制值,但它必须大于或等于其软限制值。这种降低,对普通用户而言是不可逆的。
3. 只有超级用户进程可以提高硬限制值
常量RLIM_INFINITY指定了一个无限量的限制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值