Π ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ UNIX ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ Π΄Π»Ρ ΡΠ°ΠΌΡΡ ΡΠ°Π·Π½ΡΡ ΡΠ΅Π»Π΅ΠΉ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΈΠΏ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°, ΠΈΠΌΠ΅Π½Π° ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΎΠ², ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π½Π°Π·Π²Π°Π½ΠΈΡ ΡΠ°ΡΠΎΠ²ΡΡ ΠΏΠΎΡΡΠΎΠ² ΠΈ Ρ.Π΄. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ
putenvgetenv<b>#include <stdlib.h></b><b>char *getenv(const char *name);</b><b>int putenv(const char *string);</b>ΠΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΡΠΎΠΊ Π²ΠΈΠ΄Π° ΠΈΠΌΡ=Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
getenvNULLgetenvNULLgetenvgetenvΠ€ΡΠ½ΠΊΡΠΈΡ
putenv<i>ΠΈΠΌΡ=Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅</i>errnoENOMEMΠ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΈ 4.4 Π²Ρ Π½Π°ΠΏΠΈΡeΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π»ΡΠ±ΠΎΠΉ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ Π²Π°ΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ. Π£ Π²Π°Ρ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΊΠ°ΠΆΠ΅ΡΠ΅ Π²ΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
getenvputenv1.Β ΠΠ΅ΡΠ²ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ
main#include <stdlib.h>#include <stdio.h>#include <string.h>int main(int argc, char *argv[]) {Β char *var, *value;Β if (argc == 1 || argc > 3) {Β fprintf(stderr, "usage: environ var [value]\n");Β exit(1);Β }2.Β Π‘Π΄Π΅Π»Π°Π² ΡΡΠΎ, Π²Ρ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ· ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ
getenvΒ var = argv[1];Β value = getenv(var);Β if (value)Β printf("Variable %s has value %s\n", var, value);Β elseΒ printf("Variable %s has no value\n", var);3.Β ΠΠ°Π»Π΅Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅, Π±ΡΠ» Π»ΠΈ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΊΠ°Π·Π°Π½ Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΡΠ»ΠΈ Π±ΡΠ», Π²Ρ Π·Π°Π΄Π°Π΅ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΠ½ΡΡΡΡΠΈΡΡΡ ΡΡΡΠΎΠΊΡ Π²ΠΈΠ΄Π°
<i>ΠΈΠΌΡ=Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅</i>putenvΒ if (argc == 3) {Β Β char *string;Β Β value = argv[2];Β string = malloc(strlen(var)+strlen(value)+2);Β Β if (!string} {Β Β fprintf(stderr, "out of memory\n");Β Β exit(1);Β }Β strcpy(string, var);Β Β strcat(string, "=");Β Β strcat(string, value);Β printf("Calling putenv with: %s\n", string);Β Β if (putenv(string) != 0) {Β Β fprintf(stderr, "putenv failed\n");Β Β free(string);Β Β exit(1);Β }4.Β Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²Ρ ΡΠ·Π½Π°Π΅ΡΠ΅ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π²ΡΠ·Π²Π°Π² ΡΡΠ½ΠΊΡΠΈΡ getenv Π΅ΡΠ΅ ΡΠ°Π·:
Β value = getenv(var);Β Β if (value)Β Β printf("New value of %s is %s\n", var, value);Β Β elseΒ Β printf("New value of %s is null??\n", var);Β }Β exit(0);}ΠΠΎΠ³Π΄Π° Π²Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΈ Π·Π°Π΄Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ:
$ <b>./environ ΠΠΠΠ</b>Variable HOME has value /home/neil$ <b>./environ FRED</b>Variable FRED has no value$ <b>./environ FRED hello</b>Variable FRED has no valueCalling putenv with: FRED=helloNew value of FRED is hello$ <b>./environ FRED</b>Variable FRED has no valueΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π΄Π΅Π»Π°Π΅ΡΠ΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π½Π΅ ΠΎΡΡΠ°ΠΆΠ°ΡΡΡΡ Π²Π½Π΅ Π΅Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΈΠ· Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° (Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ) Π² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ (ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ).
ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ Π·Π°Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π»ΠΈΠ±ΠΎ Π² ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°ΠΉΠ»Π° .profile, ΡΠΈΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΎΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΉ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Π·Π°ΠΏΡΡΠΊΠ° (rc) ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ, Π»ΠΈΠ±ΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ,
$ <b>./environ FRED</b>Variable FRED has no value$ <b>FRED=hello ./environ FRED</b>