2.4.2. ΠΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΠ΅Π»ΠΎΠΌ:
environΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅. ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΠΎΠΈΡ Π²Π·Π³Π»ΡΠ½ΡΡΡ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Β«ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌΒ».
ΠΠ½Π΅ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ
environargvenvironextern char **environ; /* Π‘ΠΌΠΎΡΡΠΈΡΠ΅, Π½Π΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° POSIX */ΠΠ°ΠΊ ΠΈ Π²
argvenvironNULLargc/* ch02-printenv.c --- Π Π°ΡΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅. */#include <stdio.h>extern char **environ;int main(int argc, char **argv) {Β int i;Β if (environ != NULL)Β for (i = 0; environ[i] != NULL; i++)Β Β printf("%s\n", environ[i]);Β return 0;}Π₯ΠΎΡΡ ΡΡΠΎ ΠΈ ΠΌΠ°Π»ΠΎΠ²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠΎΠΏΡΡΠΊΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
environNULLΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ Π² ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. Π₯ΠΎΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Unix Ρ ΡΠ°Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²ΠΈΠ΄Π΅, ΡΡΠΎ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Π½Π΅ ΡΠΎΡΡΠΈΡΡΡΡ ΠΈΡ .
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ»ΠΎΠ²ΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΠΎΠ±ΡΡΠ²ΠΈΠ² ΡΡΠ΅ΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
main()int main(int argc, char **argv, char **envp) {Β ...}ΠΠ°ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
envpenvironenviron2.4.3. GNU
envΠ§ΡΠΎΠ±Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡ Π³Π»Π°Π²Ρ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ GNU Π²Π΅ΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
envgetopt_long()$ env --helpUsage: env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]/* Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ VALUE Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ NAME ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ COMMAND */-i, --ignore-environment /* Π·Π°ΠΏΡΡΡΠΈΡΡ Ρ ΠΏΡΡΡΡΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ΠΌ */-u, --unset=NAMEΒ Β Β Β Β Β Β Β /* ΡΠ΄Π°Π»ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΠ· ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ */--helpΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β /* ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΡΠΎΡ ΡΠΊΡΠ°Π½ ΡΠΏΡΠ°Π²ΠΊΠΈ ΠΈ Π²ΡΠΉΡΠΈ */--versionΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β /* Π²ΡΠ²Π΅ΡΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π²Π΅ΡΡΠΈΠΈ ΠΈ Π²ΡΠΉΡΠΈ *//* ΠΡΠΎΡΡΠΎΠ΅ - ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ -1. ΠΡΠ»ΠΈ Π½Π΅ ΡΠΊΠ°Π·Π°Π½Π° COMMAND, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΒ Β ΠΈΠΌΠ΅ΡΡΠ΅Π΅ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅.ΠΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
ΡΠΎΠΎΠ±ΡΠ°ΠΉΡΠ΅ Π² <[email protected]>. */ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
$ <b>env - myprog arg1</b> /* ΠΡΠΈΡΡΠΈΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅, Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ args */$ <b>env - Π ΠΠ’Π=/bin:/usr/bin myprog arg1</b> /* ΠΡΠΈΡΡΠΈΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅, Π΄ΠΎΠ±Π°Π²ΠΈΡΡ PATH, Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ */$ <b>env -u IFS PATH=/bin:/usr/bin myprog arg1</b> /* Π‘Π±ΡΠΎΡΠΈΡΡ IFS, Π΄ΠΎΠ±Π°Π²ΠΈΡΡ PATH, Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ */ΠΠΎΠ΄ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²ΠΊΠΈ Π°Π²ΡΠΎΡΡΠΊΠΈΡ ΠΏΡΠ°Π² GNU ΠΈ ΡΠ°Π·ΡΡΡΠ½ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ. ΠΡ Π΄Π»Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΈ ΠΈΡ ΠΎΠΏΡΡΡΠΈΠ»ΠΈ. (Π€ΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²ΠΊΠ° Π°Π²ΡΠΎΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠ°Π²Π° ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΡΡΡ Π² ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π‘ Β«ΠΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½Π°Ρ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ GNUΒ». ΠΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π½Π΅Π΅ Π²ΡΠ²ΠΎΠ΄Π°
--helpN_("string")80Β #include <config.h>81Β #include <stdio.h>82Β #include <getopt.h>83Β #include <sys/types.h>84Β #include <getopt.h>8586Β #include "system.h"87Β #include "error.h"88Β #include "closeout.h"8990Β /* ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (Π½Π°ΠΏΡ., Π½Π΅Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° 'g'). */91Β #define PROGRAM_NAME "env"9293Β #define AUTHORS N_ ("Richard Mlynarik and David MacKenzie")9495Β int putenv();9697Β extern char **environ;9899Β /* ΠΠΌΡ, ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ»Π° Π·Π°ΠΏΡΡΠ΅Π½Π°. */100 char *program_name;101102 static struct option const longopts[] =103Β {