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

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

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

НСкоторыС ΠΈΠ· этих масок слуТат Ρ†Π΅Π»ΠΈ изолирования Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Π±ΠΈΡ‚ΠΎΠ², Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π² ΠΏΠΎΠ»Π΅

st_mode
:

β€’Β 

S_IFMT
прСдставляСт Π±ΠΈΡ‚Ρ‹ 12–15, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Ρ„Π°ΠΉΠ»ΠΎΠ².

β€’Β 

S_IRWXU
прСдставляСт Π±ΠΈΡ‚Ρ‹ 6–8, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€Π°Π²Π°ΠΌΠΈ доступа Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° (Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, запись, исполнСниС для User).

β€’Β 

S_IRWXG
прСдставляСт Π±ΠΈΡ‚Ρ‹ 3–5, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€Π°Π²Π°ΠΌΠΈ доступа Π³Ρ€ΡƒΠΏΠΏΡ‹ (Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, запись, исполнСниС для Group).

β€’Β 

S_IRWXO
прСдставляСт Π±ΠΈΡ‚Ρ‹ 0–2, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€Π°Π²Π°ΠΌΠΈ доступа для Β«ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…Β» (Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, запись, исполнСниС для Other).

Π‘ΠΈΡ‚Ρ‹ ΠΏΡ€Π°Π² доступа ΠΈ Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»Π° графичСски ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π½Π° рис. 5.3.

Linux ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… - img_9.jpeg

Рис. 5.3. Π‘ΠΈΡ‚Ρ‹ ΠΏΡ€Π°Π² доступа ΠΈ Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²

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

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ POSIX явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ констатируСт; Ρ‡Ρ‚ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ стандартизированы Π½ΠΎΠ²Ρ‹Π΅ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ маски ΠΈ Ρ‡Ρ‚ΠΎ тСсты для Π»ΡŽΠ±Ρ‹Ρ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… разновидностСй Ρ‚ΠΈΠΏΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹, Π±ΡƒΠ΄ΡƒΡ‚ доступны лишь Π² Π²ΠΈΠ΄Π΅ макросов

S_IS<i>xxx</i>()
.

5.4.4.1. БвСдСния ΠΎΠ± устройствС

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ POSIX Π½Π΅ опрСдСляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°

dev_t
, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡŒ Π΅Π³ΠΎ использованиС Π½Π° Π½Π΅-Unix систСмах Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ Π½Π° Unix-систСмах. Однако стоит Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ находится Π²
dev_t
.

Когда истинно

S_ISBLK(sbuf.st_mode)
ΠΈΠ»ΠΈ
S_ISCHR(sbuf.st_mode)
, свСдСния ΠΎΠ± устройствС находятся Π² ΠΏΠΎΠ»Π΅
sbuf.st_rdev
. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС это ΠΏΠΎΠ»Π΅ Π½Π΅ содСрТит Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ устройств Unix ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‚ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ ΠΈ младший Π½ΠΎΠΌΠ΅Ρ€Π° устройства Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ

dev_t
. По ΡΡ‚Π°Ρ€ΡˆΠ΅ΠΌΡƒ Π½ΠΎΠΌΠ΅Ρ€Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ Ρ‚ΠΈΠΏ устройства, Ρ‚Π°ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ «дисковый ΠΏΡ€ΠΈΠ²ΠΎΠ΄Β» ΠΈΠ»ΠΈ Β«Π»Π΅Π½Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ²ΠΎΠ΄Β». Π‘Ρ‚Π°Ρ€ΡˆΠΈΠ΅ Π½ΠΎΠΌΠ΅Ρ€Π° Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ устройств, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ диск SCSI Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ диску IDE. МладшиС Π½ΠΎΠΌΠ΅Ρ€Π° Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ устройства Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ диск ΠΈΠ»ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ эти значСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ '
ls -l
':

$ <b>ls -l /dev/hda /dev/hda?</b> /* ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€Π° для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ТСсткого диска */

brw-rw---- 1 root disk 3, 0 Aug 31 2002 /dev/hda

brw-rw---- 1 root disk 3, 1 Aug 31 2002 /dev/hda1

brw-rw---- 1 root disk 3, 2 Aug 31 2002 /dev/hda2

brw-rw---- 1 root disk 3, 3 Aug 31 2002 /dev/hda3

brw-rw---- 1 root disk 3, 4 Aug 31 2002 /dev/hda4

brw-rw---- 1 root disk 3, 5 Aug 31 2002 /dev/hda5

brw-rw---- 1 root disk 3, 6 Aug 31 2002 /dev/hda6

brw-rw---- 1 root disk 3, 7 Aug 31 2002 /dev/hda7

brw-rw---- 1 root disk 3, 8 Aug 31 2002 /dev/hda8

brw-rw---- 1 root disk 3, 9 Aug 31 2002 /dev/hda9

$ <b>ls -l /dev/null</b> /* ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ свСдСния Ρ‚Π°ΠΊΠΆΠ΅ для /dev/null */

crw-rw-rw- 1 root root 1, 3 Aug 31 2002 /dev/null

ВмСсто Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π°

ls
ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ ΠΈ младший Π½ΠΎΠΌΠ΅Ρ€Π°. Π’ случаС ТСсткого диска
/dev/hda
прСдставляСт диск Π² Ρ†Π΅Π»ΠΎΠΌ,
/dev/hda1
,
/dev/hda2
ΠΈ Ρ‚.Π΄. ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ диска. Π£ Π½ΠΈΡ… Ρƒ всСх ΠΎΠ±Ρ‰ΠΈΠΉ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ устройства (3), Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ младшиС Π½ΠΎΠΌΠ΅Ρ€Π° устройств.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ дисковыС устройства ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±Π»ΠΎΡ‡Π½Ρ‹ΠΌΠΈ устройствами, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ

/dev/null
являСтся ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ устройством. Π‘Π»ΠΎΡ‡Π½Ρ‹Π΅ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ устройства ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ сущностями; Π΄Π°ΠΆΠ΅ Ссли символьноС устройство ΠΈ Π±Π»ΠΎΡ‡Π½ΠΎΠ΅ устройство ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ устройства, ΠΎΠ½ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ связаны

Π‘Ρ‚Π°Ρ€ΡˆΠΈΠΉ ΠΈ младший Π½ΠΎΠΌΠ΅Ρ€Π° устройства ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠ· значСния

dev_t
с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
major()
ΠΈ
minor()
, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π²
&lt;sys/sysmacros.h&gt;
:

#include &lt;sys/types.h&gt; /* ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ */

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

int major(dev_t dev);Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β /* Π‘Ρ‚Π°Ρ€ΡˆΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ устройства */

int minor(dev_t dev);Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  /* Младший Π½ΠΎΠΌΠ΅Ρ€ устройства */

dev_t makedev(int major, int minor); /* Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ dev_t */

(НСкоторыС систСмы Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ ΠΈΡ… Π² Π²ΠΈΠ΄Π΅ макросов.)

Ѐункция

makedev()
ΠΈΠ΄Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡƒΡ‚Π΅ΠΌ; ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния ΡΡ‚Π°Ρ€ΡˆΠ΅Π³ΠΎ ΠΈ младшСго Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ
dev_t
. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ… Π΅Π΅ использованиС Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ; патологичСски Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ mknod(2).

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°,

ch05-devnum.c
, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ систСмный Π²Ρ‹Π·ΠΎΠ²
stat()
, макросы ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»Π° ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, макросы
major()
ΠΈ
minor()
.

/* ch05-devnum.c --- ДСмонстрация stat(), major(), minor(). */

#include &lt;stdio.h&gt;

#include &lt;errno.h&gt;

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

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

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

int main(int argc, char **argv) {

Β struct stat sbuf;

Β char *devtype;

Β if (argc != 2) {

Β  fprintf(stderr, &quot;usage: %s path\n&quot;, argv[0]);

Β  exit(1);

Β }

Β if (stat(argv[1], &amp;sbuf) &lt; 0) {

Β  fprintf(stderr, &quot;%s: stat: %s\n&quot;, argv[1], strerror(errno));

Β  exit(1);

Β }

Β if (S_ISCHR(sbuf.st_mode))