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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² срСдС Linux. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 41

Автор Майкл ДТонсон

#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>