如何在Glibc代码中读取环境变量

如何在Glibc代码中读取环境变量,c,glibc,C,Glibc,我想通过读取环境变量禁用/启用printf()输出到屏幕,类似于LD\u DEBUG的工作方式 我想控制/stdio common/printf.c 所以,如果环境变量中说disable printf(),它将调用 否则它将执行原始代码。如何实现此功能?使用getenv。有关详细信息,请参见getenv(3)。建议使用ANSI提供的解决方案作为getenv()函数,以实现最大的可移植性: #include <stdlib.h> #include <stdio.h> in

我想通过读取环境变量禁用/启用
printf()
输出到屏幕,类似于
LD\u DEBUG
的工作方式

我想控制
/stdio common/printf.c

所以,如果环境变量中说disable printf(),它将调用


否则它将执行原始代码。如何实现此功能?

使用
getenv
。有关详细信息,请参见
getenv(3)

建议使用ANSI提供的解决方案作为
getenv()
函数,以实现最大的可移植性:

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
    char * env = getenv(“PROMPT”)); 

    if(env)
        puts(env);
    else
    puts(“The environmental variable not available”);

    return 0;
}
main()
中使用第三个参数不符合标准

另一种广泛使用的非标准方式是通过
环境
外部变量访问环境变量

int i=0;
extern char ** environ;

while(environ[i])
    printf("\n%s",environ[i++]);

注意:示例是完整的,缺少错误处理

请参阅,以了解调试printf-s的可能方法,如果这是您想要的。但是您确实不应该禁用系统的
printf
(因为您不知道系统的其他部分是否希望它工作,并且因为C标准定义了它的行为)。
int main(int argc, char **argv, char **envp)
{
    while(*envp)
        printf("%s\n",*envp++);
}
int i=0;
extern char ** environ;

while(environ[i])
    printf("\n%s",environ[i++]);