2013-05-27 17 views
6

Ben C++ programlama yaparken, getenv ile bireysel ortam değişkenlerine erişebileceğimi biliyorum.Bir c/C++ uygulamasında tüm ortam değişkenleri nasıl listelenir?

Ayrıca, os x terminalinde, env kullanarak mevcut ortam değişkenlerinin TÜMÜNÜ listeleyebilirim.

Çalışan C++ programım için kullanılabilen ortam değişkenlerinin tam listesini almak istiyorum. Onları listeleyecek bir c/C++ işlevi var mı? Başka bir deyişle, C++ kodumdan env'u aramanın bir yolu var mı?

+2

Sihir burada edilir: Burada env minyatür klon [env.c] (http://minnie.tuhs.org/cgi-bin/utree.pl?file=OpenSolaris_b135/cmd/env/ env.c). – dasblinkenlight

+0

Kabuk komutu 'ENV' değil' env' dir (bu sorunu düzeltmek için sorunuzu düzenledim). –

cevap

10

environ küresel değişkeni kullanın. name=value biçimindeki bir dizi dizeye boş sonlandırılmış bir gösterici.

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

extern char **environ; 

int main(int argc, char **argv) { 
    for(char **current = environ; *current; current++) { 
     puts(*current); 
    } 
    return EXIT_SUCCESS; 
} 
+0

Gerçekten. "getenv" in alt kısmında (OP'den bahsedildiği OS X'de) "SEE SAHİBİ" bölümünden bahsediyor; Bu yüzden adam ortamı, bunu açıklayan bir manpage sağlar. apropos ortamı bu sayfayı da içerir. Bunun RTFM olması gerekmiyordu, ama OP'ye yönelik bir ipucu, "SEE SEE" bölümlerinin man sayfalarının kontrol edilmesine değer olabileceğini gösteriyor. –

11

Sen main olmayan taşınabilir envp argüman kullanmak mümkün olabilir: Eğer apple var diğer işletim bilgisi verilen veren görünüşte OSX üzerinde bonus

int main(int argc,char* argv[], char** envp) 

gibi:

int main(int argc, char **argv, char **envp, char **apple) 

Peki ne için kullanılır? Peki, Apple herhangi bir programa istedikleri "gizli" parametreleri geçmek için elma vektörünü kullanabilir. Ve aslında bunu da kullanıyorlar. Şu anda, elma [0], disk üzerinde yürütme ikili dosyasının bulunduğu yolu içerir. Sen ne diyorsun? Elma [0] argv [0] 'dan nasıl farklıdır? Fark, argv [0] 'ın çalıştırılması (2) çağrıldığında herhangi bir rasgele değere ayarlanabilmesidir. Örneğin, kabuklar genellikle [0] bir varlık argv ilk karakteri ile giriş kabukları başlatarak düzenli kabuğundan bir giriş kabuğu ayırt -

0

Whoops, system terminal komutları yürütmek sağlar unuttum.

Bu parçacık ihtiyacım olanı bana verir:

std::cout << "List of environment variables: << std::endl; 
system("env"); 
+0

Bu, değişkeni programınızda kullanılabilir yapmaz, yalnızca standart çıktıya yazdırır. –

İlgili konular