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

时间:2012-01-09 12:24:23

标签: c glibc

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

我想控制./stdio-common/printf.c

因此,如果在环境变量中说禁用printf(),则调用

int
__printf (const char *format, ...)
{
  return done;
}

否则它会执行原始代码。我该如何实现呢?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

推荐的方法是使用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()的第三个参数可能char **envp被广泛用于获取有关环境的信息,并且是non-standard

int main(int argc, char **argv, char **envp)
{
    while(*envp)
        printf("%s\n",*envp++);
}

使用main()中的第三个参数 not 严格符合标准。

还有另一种广泛使用的非标准方式来访问环境变量,即通过environ外部变量。

int i=0;
extern char ** environ;

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

注意:示例不完整,缺少错误处理。