2.4.2. ΠΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΠ΅Π»ΠΎΠΌ:
environ
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅. ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΠΎΠΈΡ Π²Π·Π³Π»ΡΠ½ΡΡΡ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Β«ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌΒ».
ΠΠ½Π΅ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ
environ
argv
environ
extern char **environ; /* Π‘ΠΌΠΎΡΡΠΈΡΠ΅, Π½Π΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° POSIX */
ΠΠ°ΠΊ ΠΈ Π²
argv
environ
NULL
argc
/* 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;
}
Π₯ΠΎΡΡ ΡΡΠΎ ΠΈ ΠΌΠ°Π»ΠΎΠ²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠΎΠΏΡΡΠΊΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
environ
NULL
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ Π² ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. Π₯ΠΎΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Unix Ρ ΡΠ°Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²ΠΈΠ΄Π΅, ΡΡΠΎ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Π½Π΅ ΡΠΎΡΡΠΈΡΡΡΡ ΠΈΡ .
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ»ΠΎΠ²ΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΠΎΠ±ΡΡΠ²ΠΈΠ² ΡΡΠ΅ΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
main()
int main(int argc, char **argv, char **envp) {
Β ...
}
ΠΠ°ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
envp
environ
environ
2.4.3. GNU
env
Π§ΡΠΎΠ±Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡ Π³Π»Π°Π²Ρ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ GNU Π²Π΅ΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
env
getopt_long()
$ env --help
Usage: 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Β». ΠΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π½Π΅Π΅ Π²ΡΠ²ΠΎΠ΄Π°
--help
N_("string")
80Β #include <config.h>
81Β #include <stdio.h>
82Β #include <getopt.h>
83Β #include <sys/types.h>
84Β #include <getopt.h>
85
86Β #include "system.h"
87Β #include "error.h"
88Β #include "closeout.h"
89
90Β /* ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (Π½Π°ΠΏΡ., Π½Π΅Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° 'g'). */
91Β #define PROGRAM_NAME "env"
92
93Β #define AUTHORS N_ ("Richard Mlynarik and David MacKenzie")
94
95Β int putenv();
96
97Β extern char **environ;
98
99Β /* ΠΠΌΡ, ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ»Π° Π·Π°ΠΏΡΡΠ΅Π½Π°. */
100 char *program_name;
101
102 static struct option const longopts[] =
103Β {