#include <sys/stat.h>
int stat(const char *pathname, struct stat *statbuf);
int lstat (const char *pathname, struct stat *statbuf);
int fstat(int fd, struct stat *statbuf);
ΠΠ΅ΡΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ, stat() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ inode Π΄Π»Ρ ΡΠ°ΠΉΠ»Π°, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° ΡΠ΅ΡΠ΅Π· pathname, ΡΠ»Π΅Π΄ΡΡ Π²ΡΠ΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΡΡΠ»ΠΊΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΡΡΠ»ΠΊΠ°ΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΠ°ΠΌΠΎ ΠΈΠΌΡ ΡΠ°ΠΊΠΎΠΉ ΡΡΡΠ»ΠΊΠΎΠΉ), ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ lstat(). ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ, fstat(), Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ inode, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ»Π°Π΅ΡΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΎΡΠΊΡΡΡΡΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ. ΠΡΠ΅ ΡΡΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²Π° Π·Π°ΠΏΠΎΠ»Π½ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ struct stat, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ statbuf, ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΌ inode. Π ΡΠ°Π±Π». 11.3 ΠΎΠΏΠΈΡΠ°Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π΄ΠΎΡΡΡΠΏΠ½Π°Ρ Π² struct stat.
Π’Π°Π±Π»ΠΈΡΠ° 11.3. Π§Π»Π΅Π½Ρ ΡΡΡΡΠΊΡΡΡΡ struct stat
Π’ΠΈΠΏ ΠΠΎΠ»Π΅ ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ dev_t st_dev ΠΠΎΠΌΠ΅Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠ°ΠΉΠ». ino_t st_ino ΠΠΎΠΌΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ on-disk inode. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°ΠΉΠ» ΠΈΠΌΠ΅Π΅Ρ Π½ΠΎΠΌΠ΅Ρ on-disk inode, ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½. Π’ΠΎ Π΅ΡΡΡ ΠΏΠ°ΡΠ° (st_dev, st_ino) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ°ΠΉΠ»Π°. mode_t st mode Π Π΅ΠΆΠΈΠΌ ΡΠ°ΠΉΠ»Π°. Π‘ΡΠ΄Π° Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΡΠ°Π²Π°Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΈ ΡΠΈΠΏΠ΅ ΡΠ°ΠΉΠ»Π°. nlink_t st_nlink ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΡΠ΅Π²ΡΡ ΠΈΠΌΠ΅Π½, ΡΡΡΠ»Π°ΡΡΠΈΡ ΡΡ Π½Π° Π΄Π°Π½Π½ΡΠΉ inode. Π‘ΡΠ΄Π° Π½Π΅ Π²ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π°, Π° Π½Π΅ Π½Π° inode. uid_t st_uid ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π²Π»Π°Π΄Π΅ΡΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»ΠΎΠΌ. gid_t st_gid ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π³ΡΡΠΏΠΏΡ, Π²Π»Π°Π΄Π΅ΡΡΠ΅ΠΉ ΡΠ°ΠΉΠ»ΠΎΠΌ. dev_t st_rdev ΠΡΠ»ΠΈ ΡΠ°ΠΉΠ» β ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ Π±Π»ΠΎΡΠ½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, ΡΡΠΎ Π·Π°Π΄Π°Π΅Ρ ΡΡΠ°ΡΡΠΈΠΉ (major) ΠΈ ΠΌΠ»Π°Π΄ΡΠΈΠΉ (minor) Π½ΠΎΠΌΠ΅ΡΠ° ΡΠ°ΠΉΠ»Π°. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ»Π΅Π½Π°Ρ ΠΈ ΠΌΠ°ΠΊΡΠΎΡΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΡΡ ΡΡΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ mknod() Π΄Π°Π»Π΅Π΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅. off_t st size Π Π°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° Π² Π±Π°ΠΉΡΠ°Ρ . ΠΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ². unsigned long st_blksize Π Π°Π·ΠΌΠ΅Ρ Π±Π»ΠΎΠΊΠ° Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, Ρ ΡΠ°Π½ΡΡΠ΅ΠΉ ΡΠ°ΠΉΠ». unsigned long st_blocks ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±Π»ΠΎΠΊΠΎΠ², Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠ°ΠΉΠ»Ρ. ΠΠ±ΡΡΠ½ΠΎ st_blksize * st_blocks β ΡΡΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ st_size, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ "Π΄ΡΡΠΊΠ°ΠΌΠΈ" st_blksize * st_blocks ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ st_size. time_t st_atime ΠΡΠ΅ΠΌΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ°ΠΉΠ»Ρ. ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΡΠΊΡΡΡΠΈΠΈ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π΅Π³ΠΎ inode. time_t st_mtime ΠΡΠ΅ΠΌΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ°ΠΉΠ»Π°. ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»Π°. time_t st_ctime ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π΅Π³ΠΎ inode, Π²ΠΊΠ»ΡΡΠ°Ρ Π²Π»Π°Π΄Π΅Π»ΡΡΠ°, Π³ΡΡΠΏΠΏΡ, ΡΡΠ΅ΡΡΠΈΠΊ ΡΠ²ΡΠ·Π΅ΠΉ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.11.3.2. ΠΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ stat()
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· lstat() Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅. ΠΠ½Π° ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ stat().
1: /* statsamp.Ρ */
2:
3: /* ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ
4: Π²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ lstat() Π΄Π»Ρ ΡΠ°ΠΉΠ»Π°. */
5:
6: #include <errno.h>
7: #include <stdio.h>
8: #include <string.h>
9: #include <sys/stat.h>
10: #include <sys/sysmacros.h>
11: #include <sys/types.h>
12: #include <time.h>
13: #include <unistd.h>
14:
15: #define TIME_STRING_BUF 50
16:
17: /* ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ buf (ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ TIME_STRING_BUF) Π²ΠΌΠ΅ΡΡΠΎ
18: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΡΠ΅ΡΠ°, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ
19: Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠΈΠΊΠ°ΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ
20: ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ. */
21: char *time String (time_t t, char *buf) {
22: struct tm *local;
23:
24: local = localtime(&t);
25: strftime(buf, TIME_STRING_BUF, "%c", local);
26:
27: return buf;
28: }
29:
30: /* ΠΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ Π²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΎΡ lstat() ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ
31: ΡΠ°ΠΉΠ»Π° ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ. */
32: int statFile(const char *file) {
33: struct stat statbuf;
34: char timeBuf[TIME_STRING_BUF];
35:
36: if (lstat(file, &statbuf)) {
37: fprintf(stderr, "Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ lstat %s: %s\n", file,
38: strerror(errno));
39: return 1;
40: }
41:
42: printf("ΠΠΌΡ ΡΠ°ΠΉΠ»Π° : %s\n", file);
43: printf("ΠΠ° ΡΡΡΡΠΎΠΉΡΡΠ²Π΅: ΡΡΠ°ΡΡΠΈΠΉ %d/ΠΌΠ»Π°Π΄ΡΠΈΠΉ %d Inode Π½ΠΎΠΌΠ΅Ρ: %ld\n" ,
44: major(statbuf.st_dev), minor(statbuf.st_dev),
45: statbuf.st_ino);
46: printf ("Π Π°Π·ΠΌΠ΅Ρ : %-101d Π’ΠΈΠΏ: %07o"
47: "ΠΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° : %05o\n", statbuf.st_size,
48: statbuf.st_mode & S_IFMT, statbuf.st_mode &~(S_IFMT));
49: printf("ΠΠ»Π°Π΄Π΅Π»Π΅Ρ : %d ΠΡΡΠΏΠΏΠ° : %d"
50: " ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ»ΠΎΠΊ : %d\n",
51: statbuf.st_uid, statbuf.st_gid, statbuf.st_nlink);
52: printf("ΠΡΠ΅ΠΌΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ : %s\n",
53: timeString(statbuf.st_ctime, timeBuf));
54: printf("ΠΡΠ΅ΠΌΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ : %s\n",
55: timeString(statbuf.st_mtime, timeBuf));
56: printf("ΠΡΠ΅ΠΌΡ Π΄ΠΎΡΡΡΠΏΠ° : %s\n",
57: timeString (statbuf.st_atime, timeBuf));
58:
59: return 0;
60: }
61:
62: int main(int argc, const char **argv) {
63: int i;
64: int rc = 0 ;
65:
66: /* ΠΡΠ·Π²Π°ΡΡ statFile() Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°,
67: ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. */
68: for (i = 1; i < argc; i++) {
69: /* ΠΡΠ»ΠΈ statFile() ΡΠ±ΠΎΠΈΡ, rc Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½Π΅ Π½ΠΎΠ»Ρ.*/
70: rc |= statFile(argv[i]);
71:
72: /* ΡΡΠΎ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π΅Π» ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡΠΌΠΈ,
73: Π½ΠΎ Π½Π΅ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ */
74: if ((argc - i) > 1) printf ("\n");
75: }
76:
77: return rc;
78: }
11.3.3. ΠΡΠΎΡΡΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ°
Π₯ΠΎΡΡ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°ΠΉΠ»Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΠΈΠΌΠ΅Π΅Ρ Π»ΠΈ ΠΎΠ½Π° Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ°ΠΉΠ»Ρ, ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π°Π±ΠΎΡΠ° ΠΏΡΠ°Π² β Π΄Π΅Π»ΠΎ Ρ ΠΈΡΡΠΎΠ΅ ΠΈ ΡΡΠ΅Π²Π°ΡΠΎΠ΅ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΄ΡΠΎ ΡΡ Π΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ°, ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ, ΠΌΠΎΠ³ΡΡ Π»ΠΈ ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
#include <unistd.h>
int access(const char *pathname, int mode);
mode β ΡΡΠΎ ΠΌΠ°ΡΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π½ΠΈΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
F_OK Π€Π°ΠΉΠ» ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΡΠ°Π² Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°ΠΌ, ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΌ ΠΏΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡΡΡ ΡΠ±ΠΎΠ΅ΠΌ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠ°ΠΉΠ» ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. R_OK ΠΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΡΠ°ΡΡ ΡΠ°ΠΉΠ». W_OK ΠΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΉΠ». X_OK ΠΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°ΠΉΠ» (ΠΈΠ»ΠΈ ΠΈΡΠΊΠ°ΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅).access() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 0, Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ Π΄ΠΎΡΡΡΠΏΠ° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ EACCESS.
11.3.4. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ°ΠΉΠ»Ρ
ΠΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° chmod().
#include <sys/stat.h>