ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΡΡΠΈΡ ΠΌΠ°ΡΠΎΠΊ ΡΠ»ΡΠΆΠ°Ρ ΡΠ΅Π»ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π½Π°Π±ΠΎΡΠΎΠ² Π±ΠΈΡΠΎΠ², Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π² ΠΏΠΎΠ»Π΅
st_modeβ’Β
S_IFMTβ’Β
S_IRWXUβ’Β
S_IRWXGβ’Β
S_IRWXOΠΠΈΡΡ ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ° ΠΈ ΡΠΈΠΏΠ° ΡΠ°ΠΉΠ»Π° Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Ρ Π½Π° ΡΠΈΡ. 5.3.

Π ΠΈΡ. 5.3. ΠΠΈΡΡ ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ° ΠΈ ΡΠΈΠΏΠ° ΡΠ°ΠΉΠ»ΠΎΠ²
ΠΠ°ΡΠΊΠΈ ΡΠΈΠΏΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΎΠ²Π°Π½Ρ Π³Π»Π°Π²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π΄Π»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ ΡΠΎ ΡΡΠ°ΡΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ; ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΌΠ΅Π½Π΅Π΅ ΡΠΈΡΠ°Π΅ΠΌ, ΡΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ. Π‘Π»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΠΌΠ°ΠΊΡΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΡΠΎΠΊ: Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠ΄Π° ΡΡΠΎΠ²Π½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Π‘ΡΠ°Π½Π΄Π°ΡΡ POSIX ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΊΠΎΠ½ΡΡΠ°ΡΠΈΡΡΠ΅Ρ; ΡΡΠΎ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ Π½Π΅ Π±ΡΠ΄ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ Π½ΠΎΠ²ΡΠ΅ Π±ΠΈΡΠΎΠ²ΡΠ΅ ΠΌΠ°ΡΠΊΠΈ ΠΈ ΡΡΠΎ ΡΠ΅ΡΡΡ Π΄Π»Ρ Π»ΡΠ±ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠ΅ΠΉ ΡΠΈΠΏΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ, Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π»ΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ²
S_IS<i>xxx</i>()5.4.4.1. Π‘Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΠ± ΡΡΡΡΠΎΠΉΡΡΠ²Π΅
Π‘ΡΠ°Π½Π΄Π°ΡΡ POSIX Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ°
dev_tdev_tΠΠΎΠ³Π΄Π° ΠΈΡΡΠΈΠ½Π½ΠΎ
S_ISBLK(sbuf.st_mode)S_ISCHR(sbuf.st_mode)sbuf.st_rdevΠ’ΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΡΠ°ΠΉΠ»Ρ ΡΡΡΡΠΎΠΉΡΡΠ² Unix ΠΊΠΎΠ΄ΠΈΡΡΡΡ ΡΡΠ°ΡΡΠΈΠΉ ΠΈ ΠΌΠ»Π°Π΄ΡΠΈΠΉ Π½ΠΎΠΌΠ΅ΡΠ° ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ
dev_tls -l$ <b>ls -l /dev/hda /dev/hda?</b> /* ΠΠΎΠΊΠ°Π·Π°ΡΡ Π½ΠΎΠΌΠ΅ΡΠ° Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΆΠ΅ΡΡΠΊΠΎΠ³ΠΎ Π΄ΠΈΡΠΊΠ° */brw-rw---- 1 root disk 3, 0 Aug 31 2002 /dev/hdabrw-rw---- 1 root disk 3, 1 Aug 31 2002 /dev/hda1brw-rw---- 1 root disk 3, 2 Aug 31 2002 /dev/hda2brw-rw---- 1 root disk 3, 3 Aug 31 2002 /dev/hda3brw-rw---- 1 root disk 3, 4 Aug 31 2002 /dev/hda4brw-rw---- 1 root disk 3, 5 Aug 31 2002 /dev/hda5brw-rw---- 1 root disk 3, 6 Aug 31 2002 /dev/hda6brw-rw---- 1 root disk 3, 7 Aug 31 2002 /dev/hda7brw-rw---- 1 root disk 3, 8 Aug 31 2002 /dev/hda8brw-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ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π΄ΠΈΡΠΊΠΎΠ²ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΡΠ²Π»ΡΡΡΡΡ Π±Π»ΠΎΡΠ½ΡΠΌΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌΠΈ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ
/dev/nullΠ‘ΡΠ°ΡΡΠΈΠΉ ΠΈ ΠΌΠ»Π°Π΄ΡΠΈΠΉ Π½ΠΎΠΌΠ΅ΡΠ° ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· Π·Π½Π°ΡΠ΅Π½ΠΈΡ
dev_tmajor()minor()<sys/sysmacros.h>#include <sys/types.h> /* ΠΠ±ΡΡΠ½ΡΠΉ */#include <sys/sysmacros.h>int major(dev_t dev);Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β /* Π‘ΡΠ°ΡΡΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π° */int minor(dev_t dev);Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β /* ΠΠ»Π°Π΄ΡΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π° */dev_t makedev(int major, int minor); /* Π‘ΠΎΠ·Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ dev_t */(ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ².)
Π€ΡΠ½ΠΊΡΠΈΡ
makedev()dev_tΠ‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°,
ch05-devnum.cstat()major()minor()/* ch05-devnum.c --- ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ stat(), major(), minor(). */#include <stdio.h>#include <errno.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/sysmacros.h>int main(int argc, char **argv) {Β struct stat sbuf;Β char *devtype;Β if (argc != 2) {Β fprintf(stderr, "usage: %s path\n", argv[0]);Β exit(1);Β }Β if (stat(argv[1], &sbuf) < 0) {Β fprintf(stderr, "%s: stat: %s\n", argv[1], strerror(errno));Β exit(1);Β }Β if (S_ISCHR(sbuf.st_mode))