Czy istnieje sposób na wyliczenie zmiennych środowiskowych i pobranie wartości za pomocą C?Wyświetlenie zmiennych środowiskowych za pomocą C w systemie UNIX
Odpowiedz
Spójrz na zmienną globalną environ
.
extern char **environ;
To może być zdefiniowana w unistd.h
(spójrz na stronie environ (5)
człowieka powyżej).
Oto mały kod demo pisałem:
#include <stdio.h>
extern char **environ;
int main()
{
for (char **env = environ; *env; ++env)
printf("%s\n", *env);
}
Oto jak go używać:
[email protected]:~/Desktop$ make enumenv CFLAGS=-std=c99
cc -std=c99 enumenv.c -o enumenv
[email protected]:~/Desktop$ ./enumenv
ORBIT_SOCKETDIR=/tmp/orbit-matt
SSH_AGENT_PID=1474
TERM=xterm
SHELL=/bin/bash
... (so forth)
Środowisko informacje mogą być przekazywane jako dodatkowy parametr do głównej. Nie wiem, czy jest zgodny, czy nie, ale na pewno działa (testowany na Ubuntu). Po prostu zdefiniuj dodatkowy argument i jego tablicę wskaźników znakowych zakończoną wskaźnikiem NULL. Poniższe wydrukują całą partię.
#include <stdio>
int main(int argc, char *argv[], char *envp[])
{
int index = 0;
while (envp[index])
printf("%s\n", envp[index++];
}
+1: nie słyszałem o tym przed – sje397
W praktyce działa to na większości unice, ale nie jest określone przez POSIX. Użyj 'zewnętrznego char ** environ;'. –
Jak Jonathan odpowiedział na jeden z moich innych komentarzy, od POSIX 2008 to * jest * teraz częścią unistd.h. –
Jest demo w książce "Programming Interface Linux" na stronie 127.
listingu 6-3: Wyświetlanie środowisko procesu ------------ ------------------------------------ proc/display_env.c
#include "tlpi_hdr.h"
extern char **environ;
int
main(int argc, char *argv[])
{
char **ep;
for (ep = environ; *ep != NULL; ep++)
puts(*ep);
exit(EXIT_SUCCESS);
}
- 1. Ustawianie zmiennych środowiskowych za pomocą lalek
- 2. Drukowanie wszystkich zmiennych środowiskowych w C/C++
- 3. Jak wyświetlić listę wszystkich zmiennych środowiskowych w C/C++ aplikacji
- 4. Klucze SSH w zmiennych środowiskowych
- 5. Jak uzyskać wartość zmiennych środowiskowych?
- 6. Ustawianie zmiennych środowiskowych programowo
- 7. Ustawianie zmiennych środowiskowych w .screenrc
- 8. Wdróż i uruchom coś za pomocą Java w systemie UNIX
- 9. Ocena zmiennych środowiskowych w ciągu znaków
- 10. Skonfiguruj Dancer ze zmiennych środowiskowych?
- 11. Używanie zmiennych jako części nazwy zmiennej w systemie UNIX
- 12. Kiedy używać zmiennych środowiskowych a właściwości systemu?
- 13. Jak drukować/echo zmiennych środowiskowych?
- 14. Jak używać zmiennych środowiskowych w pliku Eclipse .classpath?
- 15. Python: Eksportowanie zmiennych środowiskowych w podprocesie.Popen (..)
- 16. Ustawianie zmiennych środowiskowych w stacji silnika
- 17. Używanie zmiennych środowiskowych systemu w sql skrypt
- 18. Odwoływanie się do zmiennych środowiskowych w web.xml
- 19. pasażerowie phusion nie widzą zmiennych środowiskowych?
- 20. Lista funkcji C/C++ (Analiza kodu w systemie Unix)
- 21. Ustawianie zmiennych środowiskowych na GCE (kubernetes)
- 22. Czy można wyłączyć wykrywanie usługi za pomocą zmiennych środowiskowych w kernernetes?
- 23. Ustawianie zmiennych środowiskowych dla skryptu w lokalnej zmiennej funkcji bash
- 24. Ustawianie zmiennych środowiskowych dla wszystkich testów JUnit w Eclipse
- 25. Konfiguracja Heroku: nie aktualizuj zmiennych środowiskowych
- 26. Dziedziczenie zmiennych środowiskowych z GNU Parallel
- 27. Przekazywanie zmiennych środowiskowych do `./Configure` autoconf
- 28. Eksportowanie zmiennych środowiskowych do powłoki Makefile
- 29. Wiosna Chmura Config Server Priority zmiennych środowiskowych
- 30. Łączenie zmiennych zewnętrznych w C
Nie zdefiniowano w unistd.h, lub jeśli jest, twój system nie jest zgodny z POSIX. POSIX wymaga jawnego zadeklarowania 'zewnętrznego char ** environ;' jeśli chcesz go użyć. –
@R, +1. W moim systemie jest ono deklarowane tylko w 'unistd.h', jeśli ustawione jest' __USE_GNU', co oznacza, że jest rozszerzeniem. (FWIW, '__environ', również rozszerzenie, jest zadeklarowane bezwarunkowo). –
@R: Tak, zrobiłem to w moim przykładowym kodzie. –