
Π ΠΈΡ. 2.9. Π‘ΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠ°
Π‘Π²ΡΠ·ΠΈ
Π ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ UNIX Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΠΈΡΠ»ΠΎ ΡΠ²ΡΠ·Π΅ΠΉ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΠΌΠ΅Π΅Ρ Π΄Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ». ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΉΠ»Ρ /etc/init.d/lp (ΠΈΠ»ΠΈ /etc/lp), /etc/rc0.d/K201p, /etc/rc2.d/K201p ΠΈ /etc/rc2.d/S801p ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΈΠΌΠ΅Π½Π°, Π½ΠΎ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°ΠΉΠ» (ΡΠΎΡΠ½Π΅Π΅, ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Π°) ΠΈ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ Π΄Π°Π½Π½ΡΠΌ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΈΡΠ»ΠΎ ΡΠ²ΡΠ·Π΅ΠΉ ΡΠ°ΠΉΠ»Π° ΡΠ°Π²Π½ΠΎ 4. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»Π° ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ, ΡΠΈΡΠ»ΠΎ ΡΠ²ΡΠ·Π΅ΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ. ΠΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ Π΄ΠΎΡΡΠΈΠ³Π½Π΅Ρ Π½ΡΠ»Ρ β Π΄Π°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Π° Π±ΡΠ΄ΡΡ ΡΠ΄Π°Π»Π΅Π½Ρ. Π’Π°ΠΊΠΎΠΉ ΡΠΈΠΏ ΡΠ²ΡΠ·ΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΆΠ΅ΡΡΠΊΠΎΠΉ.
ΠΠ΅ΡΡΠΊΠ°Ρ ΡΠ²ΡΠ·Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° link(2):
#include <unistd.h>int link(const char *existing, const char *new);ΠΡΠΈ ΡΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π° Π½ΠΎΠ²Π°Ρ Π·Π°ΠΏΠΈΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ
newexistingΠΠ»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΆΠ΅ΡΡΠΊΠΎΠΉ ΡΠ²ΡΠ·ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² unlink(2):
#include <unistd.h>int unlink(const char *path);ΠΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° rm(1) ΠΏΡΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΡΠ°ΠΉΠ»Π°. ΠΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΠ΄ΡΡ ΡΠ΄Π°Π»Π΅Π½Ρ Π΄Π°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Π°. ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ², ΡΠ²Π½ΠΎ ΡΠ΄Π°Π»ΡΡΡΠΈΠΉ Π΄Π°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Π°, ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΆΠ΅ΡΡΠΊΠΈΡ ΡΠ²ΡΠ·Π΅ΠΉ, ΡΠ°ΡΡΡ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΏΡΠΎΡΠ΅ΡΡΡ, Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌΡ ΡΠ°ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ Π² Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅).
Π ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΆΠ΅ΡΡΠΊΠΈΠΌ ΡΠ²ΡΠ·ΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅, ΠΊΠ°ΠΊ ΠΎΡΠΌΠ΅ΡΠ°Π»ΠΎΡΡ Π² Π³Π»Π°Π²Π΅ ΡΠ²Π»ΡΡΡΡΡ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»Π°, Π² UNIX ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ²ΡΠ·ΠΈ, Π°Π΄ΡΠ΅ΡΡΡΡΠΈΠ΅ Π½Π΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Π°, Π° Π΅Π³ΠΎ ΠΈΠΌΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΡΠ°ΠΉΠ» ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ²ΡΠ·ΡΡ, ΡΠΎ Π² Π΅Π³ΠΎ Π΄Π°Π½Π½ΡΡ Ρ ΡΠ°Π½ΠΈΡΡΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, Π΄Π°Π½Π½ΡΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎ Π°Π΄ΡΠ΅ΡΡΡΡΡΡ.
Π‘ΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ²ΡΠ·Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎ Π°Π΄ΡΠ΅ΡΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°ΠΉΠ» ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² symlink(2) ΡΠ»ΡΠΆΠΈΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ²ΡΠ·ΠΈ. ΠΡΠΈΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ, ΠΊΡΡΠ°ΡΠΈ, ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° ln -s.
#include <unistd.h>int symlink (const char *name, const char *synmame);ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ²ΡΠ·ΠΈ, Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅Π»Π΅Π²ΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ name ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
symnameΠ’Π°Π±Π»ΠΈΡΠ° 2.11. ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ²ΡΠ·ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌΠΈ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ
| Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² | Π‘Π»Π΅Π΄ΡΠ΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ²ΡΠ·ΠΈ | ΠΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ²ΡΠ·ΠΈ |
|---|---|---|
| access(2) | + | |
| chdir(2) | + | |
| chmod(2) | + | |
| chown(2) | + | |
| lchown(2) | + | |
| creat(2) | + | |
| exec(2) | + | |
| link(2) | + | |
| mkdir(2) | + | |
| mknod(2) | + | |
| open(2) | + | |
| readlink(2) | + | |
| rename(2) | + | |
| stat(2) | + | |
| lstat(2) | + | |
| unlink(2) | + |
ΠΠ»Ρ ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° β ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ²ΡΠ·ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² readlink(2):
#include <unistd.h>int readlink(const char *path, void *buf, size_t bufsiz);ΠΡΠ³ΡΠΌΠ΅Π½Ρ
pathbufbufsizΠΠ»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΠΊ Π²ΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΌ ΡΠ°ΡΡΡΠΆΠ΄Π΅Π½ΠΈΡΠΌ ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ½Π°ΡΠ°Π»Π° Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ²ΡΠ·ΠΈ, Π° Π·Π°ΡΠ΅ΠΌ β ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ Π² ΠΎΠ±ΠΎΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ:
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>#define BUFSZ 256/* Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΈΠΌΡΒ Β ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ²ΡΠ·ΠΈ */main(int argc, char *argv[]) {Β char buf[BUFSZ+1];Β int nread, fd;Β /* ΠΡΠΎΡΠΈΡΠ°Π΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΌΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ²ΡΠ·ΠΈ */Β printf("Π§ΠΈΡΠ°Π΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΡΡ ΡΠ²ΡΠ·Ρ\n");Β nread = readlink(argv[1], buf, BUFSZ);