哪个C头文件定义了常用变量名称(PATH,HOME,IFS ...)?

哪个C头文件定义了常用变量名称(PATH,HOME,IFS ...)?

问题描述:

Chapter 8 of POSIX standard定义了“经常被广泛使用的命令解释器和应用程序导出”的常用环境变量的列表。哪个C头文件定义了常用变量名称(PATH,HOME,IFS ...)?

但是我找不到任何类似unix的系统中提供他们的名字的C头文件。

我在寻找类似:

#define ENV_PATH "PATH" 
#define ENV_USER "USER" 
#define ENV_IFS "IFS" 
... 

在哪里可以找到这样的标题?任何操作系统特定的头文件都可以工作:我只是不想为自己创建常量名称。

编辑

如果你是用来唯一的主流操作系统,你可能会问:你为什么要在这里使用常量? $ PATH总是$ PATH无处不在!

这实际上并非如此。

Plan 9 from Bell Labs中,环境变量通常是小写(显然是由于aesthetics)。

Jehanne,一个新的操作系统由计划9衍生,我重新考虑这个设计选择,以缓解POSIX工具的集成。但是,由于我喜欢小写的环境变量,因此当Jehanne将成为“一个真正的操作系统”时,我希望能够轻松切换回小写名称:-D

+5

有没有这样的标准头,既不在POSIX也不在(特别是)在C. –

+2

也许试图在程序开始时获得env变量名? 'void main(int ac,char ** av,char ** env)'然后在Path,User和IFS循环? – pierreafranck

+1

你为什么要输入2个以上的字符? PATH始终是PATH。改变它永远不会工作,所以没有必要将它定义为一个定义。 – Art

您可以执行类似操作get_env_variables函数可以修改你想要的。只需创建一个类似于strncmp函数的东西来检查是否要修改该变量。

int main(int ac, char **av, char **env){ 
    int i = 0; 

    while (env[i] != NULL){ 
    env[i] = get_env_variables(env[i]); 
    i++; 
    } 
} 

char *get_env_variables(char *str) { 
    // PUT SOME CODE HERE 
} 

编辑:不要忘记返回新ENV [1]。

如注释中所述,没有头文件提供应用程序和实用程序使用的任何POSIX指定的环境变量列表。

“广泛使用的命令解释程序和应用程序频繁导出的某些变量”的列表can be found at http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08。 (实际的环境变量列表需要重新格式化,但在这里它是无论如何...)

是不明智的某些变量经常 被广泛使用的命令解释器和应用程序冲突出口:

ARFLAGS IFS MAILPATH PS1 
CC LANG MAILRC PS2 
CDPATH LC_ALL MAKEFLAGS PS3 
CFLAGS LC_COLLATE MAKESHELL PS4 
CHARSET LC_CTYPE MANPATH PWD 
COLUMNS LC_MESSAGES MBOX RANDOM 
DATEMSK LC_MONETARY MORE SECONDS 
DEAD LC_NUMERIC MSGVERB SHELL 
EDITOR LC_TIME NLSPATH TERM 
ENV LDFLAGS NPROC TERMCAP 
EXINIT LEX OLDPWD TERMINFO 
FC LFLAGS OPTARG TMPDIR 
FCEDIT LINENO OPTERR TZ 
FFLAGS LINES OPTIND USER 
GET LISTER PAGER VISUAL 
GFLAGS LOGNAME PATH YACC 
HISTFILE LPDEST PPID YFLAGS 
HISTORY MAIL PRINTER 
HISTSIZE MAILCHECK PROCLANG  
HOME MAILER PROJECTDIR 

访问环境变量的值use the getenv() function

exec() function documentation指定char **environ变量:

此外,以下的变量,它必须由 用户被声明,如果它是直接使用:

extern char **environ; 

作为初始化指向指向 环境字符串的字符指针数组的指针。 argv和environ数组每个都以空指针终止 。 。结束argv阵列的空指针不计入argc

应用可以通过分配environ变量 指针指向字符的阵列以新的环境字符串改变在单一操作 整个环境。到environ分配一个新的值 后,应用程序不应该依赖于新的环境 串剩余的环境的一部分,作为getenv()一个电话, putenv()setenv()unsetenv(),或 任何功能是依赖于环境变量可能, 注意到environ已更改,请将环境字符串复制到 新阵列并将environ指定为指向它。

直接修改为其中 environ可变点有未定义的行为中的指针的任何应用程序。

符合多线程的应用程序不应使用变量来访问或修改任何环境变量,而其他任何线程同时修改任何环境变量。对 调用依赖于任何环境变量的任何函数应视为 使用environ变量来访问该环境变量。

+0

只有第一句话在这里提供了答案。剩下的是引用已经链接到问题中的文档... –