long f_bfree; /* ΡΠΈΡΠ»ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ Π±Π»ΠΎΠΊΠΎΠ² Π² Ρ.Ρ. */
long f_bavail; /* ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ, Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ */
long f_files; /* ΠΎΠ±ΡΠ΅Π΅ ΡΠΈΡΠ»ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ */
long f_ffree; /* ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π² Ρ.Ρ. */
fsid_t f_fsid; /* id ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ */
long f_namelen; /* ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»ΠΎΠ² */
long f_spare[6]; /* Π·Π°ΠΏΠ°Ρ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ */
};
ΠΠΎΠ»Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ ΠΏΠΎΠ»ΡΠΌ Π² struct statvfs. ΠΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ Π² GLIBC 2.3.2 ΡΡΠ½ΠΊΡΠΈΠΈ POSIX statvfs() ΠΈ fstatvfs() ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ°ΠΌΠΈ Π²ΠΎΠΊΡΡΠ³ statfs() ΠΈ fstatfs() ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΊΠΎΠΏΠΈΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠΈ ΡΡΡΡΠΊΡΡΡΡ Π² Π΄ΡΡΠ³ΡΡ.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ statfs() ΠΈΠ»ΠΈ fstatfs() ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ. Π―Π΄ΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π΅Ρ ΠΏΠΎΠ»Ρ f_flag Ρ ΠΎΠΏΡΠΈΡΠΌΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π΄Π»Ρ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π½ΡΠΆΠ½ΠΎΠΉ. (ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π΄Π»Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΡΠΈΠΉ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ statfvs() Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΡΠ°ΠΉΠ», ΠΈΠΌΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² path ΠΈΠ»ΠΈ fd. Π€ΡΠ½ΠΊΡΠΈΡ statfs() Π½Π΅ Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² ΡΡΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΠΏΡΠΈΡΡ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.)
ΠΡΡΡ Π΄Π²Π° Π½Π΅ΡΠ΄ΠΎΠ±ΡΡΠ²Π° Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠΈΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ². ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΎΠ½ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½Ρ Π΄Π»Ρ Linux. ΠΠΎ-Π²ΡΠΎΡΡΡ , ΡΠ°ΡΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΈΠ· struct statvfs ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π² struct statfs, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΈΠ· Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ ΡΠ»Π°Π³ΠΈ (f_flag) ΠΈ ΡΠΈΡΠ»ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² (f_favail). (ΠΠΎΡΡΠΎΠΌΡ statvfs() Linux ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΠΎΠΏΡΠΈΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ², ΡΠ°ΠΊΠΈΡ , ΠΊΠ°ΠΊ /etc/mtab, ΠΈ ΠΎΠ½Π° Β«ΡΠ°Π±ΡΠΈΠΊΡΠ΅ΡΒ» ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄Π»Ρ ΡΠ΅Ρ ΠΏΠΎΠ»Π΅ΠΉ struct statvfs, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ.)
ΠΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ struct statfs Π·Π°ΡΠ»ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΡ. ΠΡΠΎ ΠΏΠΎΠ»Π΅ f_type, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅ ΡΠΈΠΏ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠΈΡΠ»ΠΎΠΌ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π½ΠΎΠΉ ΠΈΠ· ΡΡΠΏΠ΅ΡΠ±Π»ΠΎΠΊΠ°. Π‘ΠΏΡΠ°Π²ΠΎΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° statfs(2) ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΠΈ ΠΈΡ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΈΡΠ»Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π² ch08-statfs.c. (Π£Π²Ρ, ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° #include Π½Π΅Ρ.)
1 /* ch08-statfs.Ρ --- Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ statfs Linux */
2
3 /* ΠΠΠΠΠ§ΠΠΠΠ: ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎ Π΄Π»Ρ GNU/Linux! */
4
5 #include <stdio.h>
6 #include <errno.h>
7 #include <mntent.h> /* Π΄Π»Ρ getmntent() ΠΈ Π΄Ρ. */
8 #include <unistd.h> /* Π΄Π»Ρ getopt() */
9 #include <sys/types.h>
10 #include <sys/vfs.h>
11
12 /* ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²Π·ΡΡΡ ΠΈΠ· ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ Π΄Π»Ρ statfs(2): */
13 #define AFFS_SUPER_MAGIC 0xADFF
14 #define EFS_SUPER_MAGIC 0x00414A53
15 #define EXT_SUPER_MAGIC 0x137D
16 #define EXT2_OLD_SUPER_MAGIC 0xEF51
17 #define EXT2_SUPER_MAGIC 0xEF53
18 #define HPFS_SUPER_MAGIC 0xF995E849
19 #define ISOFS_SUPER_MAGIC 0x9660
20 #define MINIX_SUPER_MAGIC 0x137F /* ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ minix */
21 #define MINIX_SUPER_MAGIC2 0x138F /* 30-ΡΠΈΠΌΠ². minix */
22 #define MINIX2_SUPER_MAGIC 0x2468 /* minix V2 */
23 #define MINIX2_SUPER_MAGIC2 0x2478 /* minix V2, ΠΈΠΌΠ΅Π½Π° 30 ΡΠΈΠΌΠ². */
24 #define MSDOS_SUPER_MAGIC 0x4d44
25 #define NCP_SUPER_MAGIC 0x564c
26 #define NFS_SUPER_MAGIC 0x6969
27 #define PROC_SUPER_MAGIC 0x9fa0
28 #define SMB_SUPER_MAGIC 0x517B
29 #define XENIX_SUPER_MAGIC 0x012FF7B4
30 #define SYSV4_SUPER_MAGIC 0x012FF7B5
31 #define SYSV2_SUPER_MAGIC 0x012FF7B6
32 #define COH_SUPER_MAGIC 0x012FF7B7
33 #define UFS_MAGIC 0x00011954
34 #define XFS_SUPER_MAGIC 0x58465342
35 #define _XIAFS_SUPER_MAGIC 0x012FD16D
36
37 void process(const char *filename);
38 void do_statfs(const struct mntent *fs);
39
40 int errors = 0;
41 char *myname;
42
/* ...main() Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, process() ΠΏΠΎΡΡΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Π°... */
85
86 /* type2str --- ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠ° fs Π² ΡΡΡΠΎΠΊΡ ΠΈΠ· statfs(2) */
87
88 const char *type2str(long type)
89 {
90 static struct fsname {
91 long type;
92 const char *name;
93 } table[] = {
94 { AFFS_SUPER_MAGIC, "AFFS" },
95 { COH_SUPER_MAGIC, "COH" },
96 { EXT2_OLD_SUPER_MAGIC, "OLD EXT2" },
97 { EXT2_SUPER_MAGIΠ‘, "EXT2" },
98 { HPFS_SUPER_MAGIC, "HPFS" },
99 { ISOFS_SUPER_MAGIC, "ISOFS" },
100 { MINIX2_SUPER_MAGIC, "MINIX V2" },
101 { MINIX2_SUPER_MAGIC2, "MINIX V2 30 char" },
102 { MINIX_SUPER_MAGIC, "MINIX" },
103 { MINIX_SUPER_MAGIC2, "MINIX 30 char" },
104 { MSDOS_SUPER_MAGIC, "MSDOS" },
105 { NCP_SUPER_MAGIΠ‘, "NCP" },
106 { NFS_SUPER_MAGIC, "NFS" },
107 { PROC_SUPER_MAGIC, "PROC" },
108 { SMB_SUPER_MAGIC, "SMB" },
109 { SYSV2_SUPER_MAGIC, "SYSV2" },
110 { SYSV4_SUPER_MAGIC, "SYSV4" },
111 { UFS_MAGIC, "UFS" },
112 { XENIX_SUPER_MAGIC, "XENIX" },
113 { _XIAFS_SUPER_MAGIC, "XIAFS" },
114 { 0, NULL },
115 };
116 static char unknown[100];
117 int i;
118
119 for (i = 0; table[i].type != 0; i++)
120 if (table[i].type == type)
121 return table[i].name;
122
123 sprintf(unknown, "unknown type: %#x", type);
124 return unknown;
125 }
126
127 /* do_statfs --- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ statfs ΠΈ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ */
128
129 void do_statfs(const struct mntent *fs)
130 {
131 struct statfs vfs;
132
133 if (fs->mnt_fsname[0] != '/') /* ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΡΠΈΠΊΡΠΈΠ²Π½ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ */
134 return;
135
136 if (statfs(fs->mnt_dir, &vfs) != 0) {
137 fprintf(stderr, "%s: %s: statfs failed: %s\n",
138 myname, fs->mnt_dir, strerror(errno));
139 errors++;
140 return;
141 }
142
143 printf("%s, mounted on %s:\n", fs->mnt_dir, fs->mnt_fsname);
144
145 printf("\tf_type: %s\n", type2str(vfs.f_type));
146 printf("\tf_bsize: %ld\n", vfs.f_bsize);
147 printf("\tf_blocks: %ld\n", vfs.f_blocks);
148 printf("\tf_bfree: %ld\n", vfs.f_bfree);
149 printf("\tf_bavail: %ld\n", vfs.f_bavail);
150 printf("\tf_files: %ld\n", vfs.f_files);
151 printf("\tf_ffree: %ld\n", vfs.f_ffree);
152 printf("\tf_namelen: %ld\n", vfs.f_namelen);
153 }
Π§ΡΠΎΠ±Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΌΠ΅ΡΡΠΎ, ΠΌΡ ΠΎΠΏΡΡΡΠΈΠ»ΠΈ main(), ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π°ΡΡ Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ ΡΠ°Π½Π΅Π΅ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΡΡΠΈΠ»ΠΈ process (), ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ do_statfs() Π²ΠΌΠ΅ΡΡΠΎ do_statvfs().
Π‘ΡΡΠΎΠΊΠΈ 13β35 ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΈΡΠ΅Π» ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΠΈΠ· ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ statfs(2). Π₯ΠΎΡΡ ΡΡΠΈ ΡΠΈΡΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΠ΄ΡΠ°, ΡΡΠΎ ΡΡΡΠ΄Π½ΠΎ (ΠΌΡ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π»ΠΈ), Π° ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π·Π΄Π΅ΡΡ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π»Π΅Π³ΡΠ΅. Π‘ΡΡΠΎΠΊΠΈ 86β125 ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ type2str(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π² Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΡΡ ΡΡΡΠΎΠΊΡ. ΠΠ½Π° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΏΡΠΎΡΡΠΎΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΠ°Ρ (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΡΡΠΎΠΊΠ°). Π (ΠΌΠ°Π»ΠΎΠ²Π΅ΡΠΎΡΡΠ½ΠΎΠΌ) ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ, type2str() ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Β«Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΡΠΈΠΏΒ» ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΅Π³ΠΎ (ΡΡΡΠΎΠΊΠΈ 123β124).
do_statfs() (ΡΡΡΠΎΠΊΠΈ 129β153) Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΈΠ· struct statfs. Π§Π»Π΅Π½ f_fsid ΠΎΠΏΡΡΠ΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ fsid_t ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΌ ΡΠΈΠΏΠΎΠΌ. ΠΠΎΠ΄ ΠΏΡΠΎΡΡ; ΡΡΡΠΎΠΊΠ° 145 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ type2str() Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΈΠΏΠ° ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ°ΠΊ Π΄Π»Ρ ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΉ statvfs(), ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ (ΡΡΡΠΎΠΊΠΈ 133β134). ΠΠΎΡ Π²ΡΠ²ΠΎΠ΄ Π½Π° Π½Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅:
$ ch08-statfs /* ΠΠ°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ */
/, mounted on /dev/hda2: /* Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ext2 */
f_type: ΠΠ₯Π’2
f_bsize: 4096
f_blocks: 1549609
f_bfrΠ΅Π΅: 316664
f_bavail: 237946
f_files: 788704
f_ffree: 555483
f_namelen: 255
...
/win, mounted on /dev/hda1: /* Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ Ρ-ΠΌΡ vfat */
f_type: MSDOS
f_bsize: 4096
f_blocks: 2092383
f_bfree: 1391952
f_bavail: 1391952
f_files: 0
f_ffree: 0
f_namelen: 260
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ statvfs() ΠΈΠ»ΠΈ statfs() Π² Π²Π°ΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²Π°ΡΠΈΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠ΅ΠΉ. ΠΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, GNU df Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ statvfs() ΠΏΠΎΠ΄ GNU/Linux ΠΈ Π² ΠΎΠ±ΡΠ΅ΠΌ ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅Π½Π΄Π΅Π½ΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Unix-ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² Β«ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅Β». Π₯ΠΎΡΡ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΡΡΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΠΎ. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΈΠ½ΠΎΠ³Π΄Π° Ρ Π²Π°Ρ Π½Π΅Ρ Π²ΡΠ±ΠΎΡΠ°: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ GLIBC, ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ Π²ΡΡΠ΅. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅Ρ Π±Π΅Π·ΡΠΏΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
8.4. ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ ΠΊ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ. ΠΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π² ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ².