哪个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
您可以执行类似操作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
变量来访问该环境变量。
只有第一句话在这里提供了答案。剩下的是引用已经链接到问题中的文档... –
有没有这样的标准头,既不在POSIX也不在(特别是)在C. –
也许试图在程序开始时获得env变量名? 'void main(int ac,char ** av,char ** env)'然后在Path,User和IFS循环? – pierreafranck
你为什么要输入2个以上的字符? PATH始终是PATH。改变它永远不会工作,所以没有必要将它定义为一个定义。 – Art