Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Linux ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 18

Автор Роббинс ΠΡ€Π½ΠΎΠ»ΡŒΠ΄

2.4. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния

ΠžΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ прСдставляСт собой Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ€ Π²ΠΈΠ΄Π° '

<i>имя</i>=<i>Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅</i>
' для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΈ ΠΏΠ°Ρ€Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ окруТСния. КаТдоС имя состоит ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΎ любого числа Π±ΡƒΠΊΠ²Π΅Π½Π½ΠΎ-Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… символов ΠΈΠ»ΠΈ символов подчСркивания ('
_
'), Π½ΠΎ имя Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с Ρ†ΠΈΡ„Ρ€Ρ‹. (Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ контролируСтся ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ; Π‘ API ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ всС, Ρ‡Ρ‚ΠΎ Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚, Π·Π° счСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ запутывания ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.)

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для управлСния ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. НапримСр, Ссли Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ сущСствуСт

POSIXLY_CORRECT
, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π·Π°ΠΏΡ€Π΅Ρ‰Π°ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ историчСскоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСсовмСстимы со стандартом POSIX.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ (ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ) ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния для управлСния ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ вмСсто Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΠΏΡ†ΠΈΠΉ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ окруТСния. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠΌ использования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΡ… Π² своСм Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΈ Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ большС постоянным Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠΏΡ†ΠΈΠΉ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, нСдостатком использования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠΎΠ»Ρ‡Π° ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π”ΠΆΠΈΠΌ ΠœΠ΅ΠΉΠ΅Ρ€ΠΈΠ½Π³ (Jim Meyering), ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Coreutils, Π²Ρ‹Ρ€Π°Π·ΠΈΠ» это Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Они ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ настройку ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· измСнСния способа Π΅Π΅ Π²Ρ‹Π·ΠΎΠ²Π°. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ благословСниСм, Ρ‚Π°ΠΊ ΠΈ проклятиСм. Если Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ сцСнарий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ зависит ΠΎΡ‚ значСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния, Π° Π·Π°Ρ‚Π΅ΠΌ этот сцСнарий ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΅Ρ‰Π΅ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ, Ρƒ ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΡ… ΠΆΠ΅ установок окруТСния, ΠΎΠ½ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Π΅Ρ€ΠΏΠ΅Ρ‚ΡŒ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ (ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ Ρ…ΡƒΠΆΠ΅, ΠΌΠΎΠ»Ρ‡Π° Π²Ρ‹Π΄Π°Ρ‚ΡŒ Π½Π΅Π²Π΅Ρ€Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹).

2.4.1. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ управлСния ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ

НСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния, ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ эти значСния ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΡ…. Π’ΠΎΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ объявлСния:

#include &lt;stdlib.h&gt;

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()
β€” Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² 99% случаСв. Π•Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ являСтся имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ, Ρ‚Π°ΠΊΠΎΠ΅, ΠΊΠ°ΠΊ Β«
ΠΠžΠœΠ•
Β» ΠΈΠ»ΠΈ Β«
PATH
Β». Если пСрСмСнная сущСствуСт,
getenv()
Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° строковоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если Π½Π΅Ρ‚, возвращаСтся
NULL
. НапримСр:

char *pathval;

/* Поиск PATH; Ссли Π½Π΅Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Β Β  ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ */

if ((pathval = getenv(&quot;PATH&quot;)) == NULL)

Β pathval = &quot;/bin:/usr/bin:/usr/ucb&quot;;

Иногда пСрСмСнная окруТСния сущСствуСт, Π½ΠΎ с пустым Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π’ этом случаС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Ρ€Π°Π²Π½ΠΎ

NULL
, Π½ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Π±ΡƒΠ΄Π΅Ρ‚ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π‘ являСтся символом ΠΊΠΎΠ½Ρ†Π° строки, '
\0
'. Π’Π°Ρˆ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Ρ€Π°Π²Π½ΠΎ NULL. Если ΠΎΠ½ΠΎ Π½Π΅
NULL
, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ строка Π½Π΅ пустая, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ для Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’ любом случаС, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ слСпо.

Для измСнСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния ΠΈΠ»ΠΈ добавлСния ΠΊ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΡŽ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ

setenv()
:

if (setenv(&quot;PATH&quot;, &quot;/bin:/usr/bin:/usr/ucb&quot;, 1) != 0) {

Β /* ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ */

}

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ пСрСмСнная ΡƒΠΆΠ΅ сущСствуСт Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ. Если Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ€Π°Π²Π΅Π½ true (Π½Π΅ ноль), Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π°Ρ‚ΠΈΡ€Π°Π΅Ρ‚ староС. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ мСняСтся. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ -1, Ссли для Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ памяти, ΠΈ 0 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС.

setenv()
для сохранСния Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚Π°ΠΊ ΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΅Π΅ значСния

Π‘ΠΎΠ»Π΅Π΅ простой Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ

setenv()
являСтся
putenv()
, которая Π±Π΅Ρ€Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ строку Β«
<i>имя</i>=<i>Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅</i>
Β» ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Π΅ Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅:

if (putenv(&quot;PATH=/bin:/usr/bin:/usr/ucb&quot;) != 0) {

Β /* ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ */

}

putenv()
слСпо замСняСт Π»ΡŽΠ±Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния для Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. А Ρ‚Π°ΠΊΠΆΠ΅, ΠΈ это, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, строка, пСрСданная
putenv()
, помСщаСтся нСпосрСдствСнно Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли ваш ΠΊΠΎΠ΄ ΠΏΠΎΠ·ΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ эту строку (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли это Π±Ρ‹Π» массив, Π° Π½Π΅ строковая константа), ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ. Π­Ρ‚ΠΎ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для
putenv()
Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. По всСм этим ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ
setenv()
являСтся Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

Π—ΠΠœΠ•Π§ΠΠΠ˜Π•. GNU

putenv()
ΠΈΠΌΠ΅Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ (Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ) ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π² своСм ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ. Если строка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° являСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ Π±Π΅Π· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π° Π½ΠΈΠΌ символа
=
, имСнованная пСрСмСнная удаляСтся. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° GNU
env
, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ рассмотрим Π΄Π°Π»Π΅Π΅ Π² ΠΌΠΎΠΉ Π³Π»Π°Π²Π΅, полагаСтся Π½Π° Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

Ѐункция

unsetenv()
удаляСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈΠ· окруТСния:

unsetenv(&quot;PATH&quot;);

НаконСц, функция

clearenv()
ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅:

if (clearenv() != 0) {

Β /* ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ */

}

Π­Ρ‚Π° функция Π½Π΅ стандартизирована POSIX, хотя ΠΎΠ½Π° доступна Π² GNU/Linux ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… коммСрчСских Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… Unix. Π•Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ бСзопасным ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ собствСнноС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ с нуля. Если

clearenv()
нСдоступна, Π² справкС GNU/Linux для clearenv(3) рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для выполнСния этой Π·Π°Π΄Π°Ρ‡ΠΈ '
environ = NULL
'.