8.1.2 进程环境和属性
来源:互联网 发布:uclinux与linux 编辑:程序博客网 时间:2024/06/06 15:53
8.1.2 进程环境和属性
在Linux系统,C程序总是从main()函数开始的,当用户编写好的程序在运行的时候,操作系统会使用exec()函数运行程序,在调用main()函数之前,exec()系统调用会先调用一个特殊的启动例程,负责从操作系统内核读取程序的命令行参数,为main()函数准备好工作环境。
由于历史的原因,大多数UNIX系统的main()函数定义如下:
int main(int argc, char *argv[], char *envp[]);
参数argc表示参数argv有多少个字符串,注意参数argv的定义表示的是一个不定长的字符串数组。参数envp以name=value的形式存放了一组进程运行中会用到的环境变量。ANSI规定了main()函数只能有两个参数,同时,参数envp也不能给系统开发带来更多的好处,所以POSIX标准规定使用一个全局的环境变量environ取代了参数envp,应用程序可以通过getenv()和putenv()函数读取或设定一个环境变量。
getenv()函数定义如下:
#include <stdlib.h>
char *getenv(const char *name);
参数name是要获取的环境变量名字,函数返回值为NULL,表示没有获取到指定环境变量的值,否则指向获取到的环境变量值的字符串。POSIX.1标准定义了若干环境变量,请参考表8-1。
表8-1 POSIX.1定义的环境变量及含义
变 量
含 义
变 量
含 义
HOME
起始目录
LC_TIME
本地日期/时间格式
LANG
本地名(本地语言类型)
LOGNAME
登录名
LC_ALL
本地名
NLSPATH
消息类模板序列
LC_COLLATE
本地排序名
PATH
搜索可执行文件的路径
LC_CTYPE
本地字符分类名
TERM
终端类型
LC_MONETARY
本地货币类型
TZ
时区信息
LC_NUMERIC
本地数字编辑名
表8-1定义的环境变量不是所有的系统都能实现,在Linux系统下如果使用bash作为命令行,可以执行export查看本机支持的环境变量名称和内容。实例8-1演示如何得到环境变量,代码如下:
实例8-1 在程序中获得环境变量
// filename getenv.c – 获取环境变量测试
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *env_path = "PATH"; // 打算获取的环境变量名称
char *env_value = NULL; // 环境变量值
env_value = getenv(env_path); // 使用系统函数获取指定环境变量
if (NULL==env_value) // 检查是否获取到变量的值
printf("Not found!/n");
printf("Get Env PATH:/n%s", env_value); // 输出PATH环境变量的值
return 0;
}
程序编译后运行,输出结果如下:
Get Env PATH:
/opt/rmi/1.1/mipscross/elf/bin:/opt/rmi/1.1/mipscross/crosstool/gcc-3.4.3-glibc-2.3.6/mipsisa32-xlr-linux/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/gonglei/bin[gonglei
%提示:环境变量是一个有用的方法,用户可以在程序中通过环境变量获取操作系统提供的信息,同时可以设置自己的环境变量,达到和其他程序以及脚本直接信息交互的目的。
一个进程除了能获得操作系统提供的环境变量外,还具备自身的基本属性,主要包括:
q 进程号(PID:Process ID):操作系统通过进程号标识一个用户进程。
q 父进程号(PPID:Parent Process ID):在Linux系统,除了init进程外,所有的进程都是通过init进程创建的。同时,进程又可以创建其他的进程,最终形成了一个倒过来的树形结构,每个进程都会有自己的父进程,通过父进程号标识。
q 进程组号(PGID:Process Group ID):操作系统允许对进程分组,不同的进程通过进程组号标识。
q 真实用户号(UID:User ID):用户的唯一标识号,用于标识一个用户。
q 真实组号(GID:Group ID):用户组的唯一标识号,用于标识一个用户组。
q 有效用户号(EUID:Effective User ID):以其他用户身份访问文件使用。
q 有效组号(EGID:Effective Group ID):以其他用户组身份访问文件使用。
- 8.1.2 进程环境和属性
- 进程环境和属性
- linux 进程管理---进程环境和属性总结
- linux进程环境及进程属性
- 进程环境与进程控制(2): 堆和栈
- JAVA进程和属性了解
- golang 进程属性和控制
- 进程学习2--进程环境
- 进程的基本属性:进程ID、父进程ID、进程组ID、会话和控制终端
- 进程的基本属性:进程ID、父进程ID、进程组ID、会话和控制终端
- 7.10 进程环境_setjmp和longjmp函数
- Linux进程-命令行参数和环境列表
- Linux进程-命令行参数和环境列表
- Linux进程-命令行参数和环境列表
- 进程环境之setjmp和longjmp函数
- windows环境下查看进程和杀死进程
- Material Design 概念,环境和基本属性
- 进程环境
- delphi 控制分布式数据库通信方式
- 8.1.1 什么是进程
- 电话网络相关PBX,ICT
- Network monitoring with MRTG
- FLEX 实用属性详解
- 8.1.2 进程环境和属性
- 实例解析linux内核I2C体系结构(1)
- 下面是EntityManager的一些主要的接口要领
- 使用bitbltmasked去除图形白色区域,使之变透明(源代码)
- delphi如何做启动图片,就是如delphi启动时先加载一张图片
- Flex 重复加载图片对内存和性能的影响
- PSTN 公共交换电话网络
- All routing maps in a partition scheme must also be listed on a line in the configuration file.
- c语言的自动类型转换