2.4. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
ΠΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π½Π°Π±ΠΎΡ ΠΏΠ°Ρ Π²ΠΈΠ΄Π° '
<i>ΠΈΠΌΡ</i>=<i>Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅</i>
_
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ
POSIXLY_CORRECT
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅ΡΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ (ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ) ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΎΠΏΡΠΈΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ. ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΡ Π² ΡΠ²ΠΎΠ΅ΠΌ Π·Π°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΈ Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΎΠΏΡΠΈΠΉ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΌΠΎΠ»ΡΠ° ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΆΠΈΠΌ ΠΠ΅ΠΉΠ΅ΡΠΈΠ½Π³ (Jim Meyering), ΡΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ Coreutils, Π²ΡΡΠ°Π·ΠΈΠ» ΡΡΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠ½ΠΈ ΡΠΏΡΠΎΡΠ°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΏΠΎΡΠΎΠ±Π° Π΅Π΅ Π²ΡΠ·ΠΎΠ²Π°. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ°ΠΊ Π±Π»Π°Π³ΠΎΡΠ»ΠΎΠ²Π΅Π½ΠΈΠ΅ΠΌ, ΡΠ°ΠΊ ΠΈ ΠΏΡΠΎΠΊΠ»ΡΡΠΈΠ΅ΠΌ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, Π° Π·Π°ΡΠ΅ΠΌ ΡΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΅ΡΠ΅ ΠΊΡΠΎ-ΡΠΎ, Ρ ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ ΡΠ°ΠΊΠΈΡ ΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΠΎΠ½ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ΅ΡΠΏΠ΅ΡΡ Π½Π΅ΡΠ΄Π°ΡΡ (ΠΈΠ»ΠΈ, ΡΡΠΎ Π΅ΡΠ΅ Ρ ΡΠΆΠ΅, ΠΌΠΎΠ»ΡΠ° Π²ΡΠ΄Π°ΡΡ Π½Π΅Π²Π΅ΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ).
2.4.1. Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ΠΌ
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΠΈΡ . ΠΠΎΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ:
#include <stdlib.h>
char *getenv(const char *name);
/* ISO Π‘: ΠΠΎΠ»ΡΡΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Β Β ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ */
int setenv(const char *name, /* POSIX: Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ */
Β Β Β Β Β Β Β Β Β Β const char *value, /* ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ */
Β Β Β Β Β Β Β Β Β Β Β int overwrite);
int putenv(char *string); /* XSI: Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΡΠΎΠΊΡ */
void unsetenv(const char *name); /* POSIX: Π£Π΄Π°Π»ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ */
int clearenv(void); /* ΠΠ±ΡΠ΅Π΅: ΠΎΡΠΈΡΡΠΈΡΡ Π²ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ */
Π€ΡΠ½ΠΊΡΠΈΡ
getenv()
ΠΠΠΠ
PATH
getenv()
NULL
char *pathval;
/* ΠΠΎΠΈΡΠΊ PATH; Π΅ΡΠ»ΠΈ Π½Π΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
Β Β ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ */
if ((pathval = getenv("PATH")) == NULL)
Β pathval = "/bin:/usr/bin:/usr/ucb";
ΠΠ½ΠΎΠ³Π΄Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, Π½ΠΎ Ρ ΠΏΡΡΡΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠ°Π²Π½ΠΎ
NULL
\0
NULL
ΠΠ»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΊ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ
setenv()
if (setenv("PATH", "/bin:/usr/bin:/usr/ucb", 1) != 0) {
Β /* ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ */
}
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π² ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ. ΠΡΠ»ΠΈ ΡΡΠ΅ΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠ°Π²Π΅Π½ true (Π½Π΅ Π½ΠΎΠ»Ρ), Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π°ΡΠΈΡΠ°Π΅Ρ ΡΡΠ°ΡΠΎΠ΅. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π²Π½ΠΎ -1, Π΅ΡΠ»ΠΈ Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ Ρ Π²Π°ΡΠΈΠ»ΠΎ ΠΏΠ°ΠΌΡΡΠΈ, ΠΈ 0 Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
setenv()
ΠΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ
setenv()
putenv()
<i>ΠΈΠΌΡ</i>=<i>Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅</i>
if (putenv("PATH=/bin:/usr/bin:/usr/ucb") != 0) {
Β /* ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ */
}
putenv()
putenv()
putenv()
setenv()
ΠΠΠΠΠ§ΠΠΠΠ. GNU
putenv()
=
env
Π€ΡΠ½ΠΊΡΠΈΡ
unsetenv()
unsetenv("PATH");
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ
clearenv()
if (clearenv() != 0) {
Β /* ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ */
}
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° POSIX, Ρ ΠΎΡΡ ΠΎΠ½Π° Π΄ΠΎΡΡΡΠΏΠ½Π° Π² GNU/Linux ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΡ Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ Unix. ΠΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π΅ΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Ρ Π½ΡΠ»Ρ. ΠΡΠ»ΠΈ
clearenv()
environ = NULL