../../03-memory.texi...ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π½Π°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π²Π·ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² ΠΊΠ°Π²ΡΡΠΊΠΈ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΈΡ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΎΠΉ!
Π Π±ΡΠ»ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π°, ΠΎΠΊΠΎΠ»ΠΎ V6 Unix, Π΄Π»Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π° Π·Π° ΠΊΡΠ»ΠΈΡΠ°ΠΌΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π°Π·ΡΠ²Π°Π»Π°ΡΡ
/etc/globΠ’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π³Π»Π°Π³ΠΎΠ» Β«to globΒ» ΠΏΡΠΎΠ½ΠΈΠΊ Π² Π»Π΅ΠΊΡΠΈΠΊΠΎΠ½ Unix ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Β«ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈΒ». ΠΡΠΎ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π΄Π°Π΅Ρ Π½Π°ΠΌ ΠΈΠΌΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΠΉ
glob()globfree()glob()12.7.3. Π Π°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ»ΠΎΠ² ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΎΠΉ:
wordexp()wordfree()ΠΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ»Π΅Π½Ρ ΠΊΠΎΠΌΠΈΡΠ΅ΡΠ° POSIX ΡΡΠ²ΡΡΠ²ΠΎΠ²Π°Π»ΠΈ, ΡΡΠΎ
glob()echo ~arnoldecho $HOMEecho $(cd ; pwd)glob()#include <wordexp.h> /* POSIX */int wordexp(const char *words, wordexp_t *pwordexp, int flags);void wordfree(wordexp_t *wordexp);ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΡ ΠΎΠ΄Π½ΡΠΌ Ρ
glob()globfree()wordexp_ttypedef struct {Β size_t we_wordc; /* Π§ΠΈΡΠ»ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈΡ
ΡΠ»ΠΎΠ² */Β char **we_wordv; /* Π‘ΠΏΠΈΡΠΎΠΊ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡΡ
ΡΠ»ΠΎΠ² */Β size_t we_offs;Β /* Π Π΅Π·Π΅ΡΠ²ΠΈΡΡΠ΅ΠΌΡΠ΅ Π² we_wordv ΡΠ»ΠΎΡΡ */} wordexp_t;Π§Π»Π΅Π½Ρ ΡΡΡΡΠΊΡΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΌ ΡΠ°Π½Π΅Π΅ Π΄Π»Ρ
glob_tΠΠ°ΠΊ ΠΈ Π΄Π»Ρ
glob()wordexp()Π’Π°Π±Π»ΠΈΡΠ° 12.5. Π€Π»Π°Π³ΠΈ Π΄Π»Ρ
wordexp()| ΠΠΎΠ½ΡΡΠ°Π½ΡΠ° | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ |
|---|---|
WRDE_APPEND | ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΊ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ |
WRDE_DOOFFS | ΠΠ°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°ΡΡ we_offswe_wordv |
WRDE_NOCMD | ΠΠ°ΠΏΡΠ΅ΡΠΈΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΊΠΎΠΌΠ°Π½Π΄ |
WRDE_REUSE | ΠΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΌΡΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ we_wordv |
WRDE_SHOWERR | ΠΠ΅ ΠΌΠΎΠ»ΡΠ°ΡΡ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ |
WRDE_UNDEF | ΠΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ |
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π²Π½ΠΎ 0, Π΅ΡΠ»ΠΈ Π²ΡΠ΅ ΠΏΡΠΎΡΠ»ΠΎ Ρ ΠΎΡΠΎΡΠΎ, ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΡΠ°Π±Π». 12.6, Π΅ΡΠ»ΠΈ Π½Π΅Ρ.
Π’Π°Π±Π»ΠΈΡΠ° 12.6. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π΄Π»Ρ
wordexp()| ΠΠΎΠ½ΡΡΠ°Π½ΡΠ° | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ |
|---|---|
WRDE_BADCHAR | ΠΠ΅ΡΠ°ΡΠΈΠΌΠ²ΠΎΠ» (ΠΊΠΎΠ½Π΅Ρ ΡΡΡΠΎΠΊΠΈ, '|', &, ;, <, >, (, ), {, ΠΈΠ»ΠΈ }) Π² Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ |
WRDE_BADVAL | ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ WRDE_UNDEF |
WRDE_CMDSUB | ΠΠΎΠΏΡΡΠΊΠ° ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ WRDE_NOCMD |
WRDE_NOSPACE | ΠΡΠ»Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ |
WRDE_SYNTAX | Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ° ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ. |
ΠΡ ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π²Π°ΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ (ΡΠΌ. Π΄Π°Π»Π΅Π΅) ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ
ch12-glob.cwordexp()wordfree()$ <b>ch12-wordexp</b> 'echo $HOME' /* Π Π°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ */echo/home/arnold$ <b>ch12-wordexp 'echo $HOME/*.gz'</b> /* ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ */echo/home/arnold/48000.wav.gz/home/arnold/ipmasq-HOWTO.tar.gz/home/arnold/rc.firewall-examples.tar.gz$ <b>ch12-wordexp 'echo ~arnold'</b> /* Π Π°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠ»ΡΠ΄Ρ */echo/home/arnold$ <b>ch12-wordexp 'echo ~arnold/.p*'</b> /* Π’ΠΈΠ»ΡΠ΄Π° ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ */echo/home/arnold/.postitnotes/home/arnold/.procmailrc/home/arnold/.profile$ <b>ch12-wordexp "echo '~arnold/.p*'"</b> /* ΠΠ°Π²ΡΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ */