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

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

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

$Β <b>mount</b> /* ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы */

/dev/hda2 on / type ext3 (rw)

/dev/hda5 on /d type ext3 (rw)

...

$ <b>ls -li /tmp/message</b> /* ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±Ρ‹Π» Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС / */

228786 -rw-r--r-- 2 arnold devel 19 May 4 15:51 /tmp/message

$ <b>cat /tmp/message</b>

Hi, how ya doin' ?

$ <b>/bin/pwd</b> /* Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС */

/d/home/arnold

$ <b>ln /tmp/message .</b> /* ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ссылку */

ln: creating hard link './message' to '/tmp/message': Invalid cross-device link

На Π±ΠΎΠ»ΡŒΡˆΠΈΡ… систСмах часто ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΊΠ°ΠΊ Π½Π° физичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… дисках, Ρ‚Π°ΠΊ ΠΈ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ смонтированных Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСмах. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ прямых ссылок ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠ΅Π½Ρ‹ Π² Π½ΠΎΠ²ΠΎΠ΅ мСсто, Π½ΠΎ староС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ТСстко Π²ΡˆΠΈΡ‚Ρ‹Π΅ Π² ΠΊΠΎΠ΄ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² для старых мСстополоТСний.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, 4.2 BSD Π²Π²Π΅Π»ΠΎ символичСскиС ссылки (symbolic links, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ soft links). БимволичСская ссылка являСтся особой Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ Ρ„Π°ΠΉΠ»Π° (Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ особой Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ Ρ„Π°ΠΉΠ»Π° являСтся ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³). Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ этого Ρ„Π°ΠΉΠ»Π° прСдставляСт собой ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Β«ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Β». ВсС соврСмСнныС Unix-систСмы, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Linux, ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ символичСскиС ссылки; ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΎΠ½ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ POSIX.

БимволичСскиС ссылки ΠΌΠΎΠ³ΡƒΡ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° любой Ρ„Π°ΠΉΠ» Π² систСмС. Они ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ. Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² с мСста Π½Π° мСсто, ΠΊΠΎΠ³Π΄Π° Π½Π° старом мСстС остаСтся символичСская ссылка, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Π½Π° Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° систСма ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ символичСскиС ссылки ΠΈ осущСствляСт Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ дСйствия Π² Ρ„Π°ΠΉΠ»Π΅ ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Π½. БимволичСскиС ссылки ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ

-s
ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
ln
:

$ <b>/bin/pwd</b> /* Π“Π΄Π΅ ΠΌΡ‹ находимся */

/d/home/arnold /* Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС */

$ <b>ln -s /tmp/message ./hello</b> /* Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ссылку */

$ <b>cat hello</b> /* Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ */

Hi, how ya doin' ?

$ <b>ls -l hello</b> /* ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π΅ΠΉ */

lrwxrwxrwx 1 arnold devel 12 May 4 16:41 hello -&gt; /tmp/message

Π€Π°ΠΉΠ», Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ссылка, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. БистСма ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ это Π²ΠΎ врСмя исполнСния ΠΈ дСйствуСт ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

$ <b>rm /tmp/message</b> /* Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» */

$ <b>cat ./hello</b> /* ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° использования Ρ‡Π΅Ρ€Π΅Π· ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ссылку */

cat: ./hello: No such file or directory

$ <b>echo hi again &gt; hello</b> /* Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ содСрТаниС Ρ„Π°ΠΉΠ»Π° */

$ <b>ls -l /tmp/message</b> /* ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ */

-rw-r--r-- 1 arnold devel 9 May 4 16:45 /tmp/message

$ <b>cat /tmp/message</b> /* ...ΠΈ содСрТаниС */

hi again

БимволичСскиС ссылки ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмного Π²Ρ‹Π·ΠΎΠ²Π°

symlink()
:

#include &lt;unistd.h&gt; /* POSIX */

int symlink(const char *oldpath, const char *newpath);

АргумСнт

oldpath
содСрТит ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, a
newpath
являСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ создаваСмой символичСской ссылки. ΠŸΡ€ΠΈ успСхС возвращаСтся 0, Π° ΠΏΡ€ΠΈ ошибкС (-1), Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния
errno
см. Π² справочной страницС для symlink(2). Π£ символичСских ссылок Π΅ΡΡ‚ΡŒ свои нСдостатки:

β€’Β ΠžΠ½ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ лишнСС дисковоС пространство, трСбуя ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ индСкса ΠΈ Π±Π»ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΡΠΌΡ‹Π΅ ссылки Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ лишь элСмСнт ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

β€’Β ΠžΠ½ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ лишниС Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы. Π―Π΄Ρ€ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ большС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡƒΡ‚ΠΈ, содСрТащСго символичСскиС ссылки.

β€’Β ΠžΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Β«Ρ†ΠΈΠΊΠ»Ρ‹Β». РассмотритС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

$ <b>rm -f a b</b> /* Π£Π±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ 'a' ΠΈ 'b' Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ */

$ <b>ln -s a b</b> /* Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ссылку старого Ρ„Π°ΠΉΠ»Π° 'a' Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ 'b' */

$ <b>ln -s b a</b> /* Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ссылку старого Ρ„Π°ΠΉΠ»Π° 'b' Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ 'a' */

$ <b>cat Π°</b> /* Π§Ρ‚ΠΎ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ? */

cat: a: Too many levels of symbolic links

Π―Π΄Ρ€ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ способно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ случай ΠΈ Π²Ρ‹Π΄Π°Ρ‚ΡŒ сообщСниС ΠΎΠ± ошибкС.

β€’ Они Π»Π΅Π³ΠΊΠΎ ΠΎΠ±Ρ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ. Если ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ мСсто ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, символичСская ссылка большС Π½Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π°. Π‘ прямой ссылкой Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚.

5.2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² просто. Двумя систСмными Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎ Π½Π΅ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ

mkdir()
ΠΈ
rmdir()
соотвСтствСнно:

#include &lt;sys/types.h&gt; /* POSIX */

#include &lt;sys/stat.h&gt;

int mkdir(const char *pathname, mode_t mode);

#include &lt;unistd.h&gt; /* POSIX */

int rmdir(const char *pathname);

Оба Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ 0 ΠΏΡ€ΠΈ успСхС ΠΈ (-1) ΠΏΡ€ΠΈ ошибкС, с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ

errno
. АргумСнт
mode
для
mkdir()
прСдставляСт ΠΏΡ€Π°Π²Π° доступа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Он ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ
mode
для
creat()
ΠΈ
open()
, ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π²ΡˆΠΈΠΌΡΡ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 4.6 Β«Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Β».

ОбС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ '

.
' ΠΈ '
..
' Π² создаваСмом ΠΈΠ»ΠΈ удаляСмом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. ΠŸΠ΅Ρ€Π΅Π΄ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ пуст; Ссли это Π½Π΅ Ρ‚Π°ΠΊ,
errno
устанавливаСтся Π²
ENOTEMPTY
. (Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС, «пуст» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ '
.
' ΠΈ '
..
'.)