2012-01-09 18 views
1

LD_DEBUGの動作と同様に、環境変数を読み取ってprintf()の出力を無効にしたい場合Glibcコードで環境変数を読み取る方法

./stdio-common/printf.cを制御したいと思います。環境変数にそう

場合は、それが元のコードを実行

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

を呼び出す)(printf関数を無効に述べています。私はこれをどのように実装しますか?

+0

デバッグprintf-sを実行する方法については、http://stackoverflow.com/a/8742414/841108を参照してください。 –

+0

しかし、システムの他の部分がそれを期待しているかどうか、そしてC標準がその動作を定義しているので、あなたは本当に*システムの 'printf'を無効にしてはいけません。 –

答えて

3

getenvを使用してください。詳細はgetenv(3)を参照してください。

0

お勧めの方法は、最大の移植のためのgetenv()関数としてANSIによって提供される解決策を使用することです:

#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()の3番目の引数は、char **envpであり、環境に関する情報を得るために広く使われており、non-standardです。 main()で三番目の引数を使用して

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

ないは厳密に標準に準拠しています。

環境変数にアクセスするための広く普及していない別の方法があり、それは外部変数environです。

int i=0; 
extern char ** environ; 

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

注:例は完全であり、エラー処理はありません。

関連する問題