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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIXΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 36

Автор АндрСй РобачСвский

БимволичСская связь позволяСт косвСнно Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Π°ΠΉΠ» Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. БистСмный Π²Ρ‹Π·ΠΎΠ² symlink(2) слуТит для создания символичСской связи. Π­Ρ‚ΠΈΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ, кстати, ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° ln -s.

#include <unistd.h>


int symlink (const char *name, const char *synmame);

ПослС создания символичСской связи, доступ ΠΊ Ρ†Π΅Π»Π΅Π²ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ name ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ symname. ΠŸΡ€ΠΈ этом, функция open(2), принимая Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° имя символичСской связи, Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ». Вакая ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ называСтся слСдованиСм символичСской связи. НС всС систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ этим свойством. НапримСр, систСмный Π²Ρ‹Π·ΠΎΠ² unlink(2), ΡƒΠ΄Π°Π»ΡΡŽΡ‰ΠΈΠΉ запись Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, дСйствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° саму ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ связь. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, ΠΌΡ‹ Π½Π΅ ΠΈΠΌΠ΅Π»ΠΈ Π±Ρ‹ возмоТности ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΅Π΅. Π’ Ρ‚Π°Π±Π». 2.11 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с символичСскими связями Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹.


Π’Π°Π±Π»ΠΈΡ†Π° 2.11. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡ символичСской связи Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ систСмными Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ

БистСмный Π²Ρ‹Π·ΠΎΠ² Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ символичСской связи НС слСдуСт символичСской связи access(2) + chdir(2) + chmod(2) + chown(2) + lchown(2) + creat(2) + exec(2) + link(2) + mkdir(2) + mknod(2) + open(2) + readlink(2) + rename(2) + stat(2) + lstat(2) + unlink(2) +

Для чтСния содСрТимого Ρ„Π°ΠΉΠ»Π° β€” символичСской связи ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ систСмный Π²Ρ‹Π·ΠΎΠ² readlink(2):

#include <unistd.h>


int readlink(const char *path, void *buf, size_t bufsiz);

АргумСнт path содСрТит имя символичСской связи. Π’ Π±ΡƒΡ„Π΅Ρ€Π΅ buf Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ bufsiz возвращаСтся содСрТимоС Ρ„Π°ΠΉΠ»Π° β€” символичСской связи.

Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΊ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ рассуТдСниям ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая сначала Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ содСрТимоС символичСской связи, Π° Π·Π°Ρ‚Π΅ΠΌ β€” Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ Π² ΠΎΠ±ΠΎΠΈΡ… случаях символичСским ΠΈΠΌΠ΅Π½Π΅ΠΌ:

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <stdio.h>


#define BUFSZ 256


/* Π’ качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ имя

   символичСской связи */

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

 char buf[BUFSZ+1];

 int nread, fd;

 /* ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌ содСрТимоС самой символичСской связи */

 printf("Π§ΠΈΡ‚Π°Π΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ связь\n");

 nread = readlink(argv[1], buf, BUFSZ);

 if (nread < 0) {

  perror("readlink");

  exit(1);

 }

 /* readlink Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ строку '\0' */

 printf("БимволичСская связь:\n %s\n", buf);

 /* Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌ содСрТимоС Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° */

 printf("Π§ΠΈΡ‚Π°Π΅ΠΌ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ»\n");

 fd = open(argv[1], O_RDONLY);

 if (fd < 0) {

  perror("open");

  exit(2);

 }

 nread = read(fd, buf, BUFSIZ);

 if (nread < 0) {

  perror("read");

  exit(3);

 }

 buf[nread] = '\0';

 printf("Π¦Π΅Π»Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ»:\n %s\n", buf);

 close(fd);

 exit(0);

}

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, создадим ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ связь с Ρ„Π°ΠΉΠ»ΠΎΠΌ unix0.txt:

$ ln -s unix0.txt symlink.txt

$ ls -l

lrwxrwxrwx 1 andy user  10 Jan 6 09:54 symlink.txt -> unix0.txt

-rw-r--r-- 1 andy user 498 Jan 6 09:53 unix0.txt

$ a.out symlink.txt

Π§ΠΈΡ‚Π°Π΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ связь

БимволичСская связь:

unix0.txt

Π§ΠΈΡ‚Π°Π΅ΠΌ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ»

Π¦Π΅Π»Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ»:

Начиная с 1975 Π³ΠΎΠ΄Π° Ρ„ΠΈΡ€ΠΌΠ° AT&T Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ Π½Π°

использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΊΠ°ΠΊ Π½Π°ΡƒΡ‡Π½ΠΎ-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ

учрСТдСниям, Ρ‚Π°ΠΊ ΠΈ коммСрчСским организациям. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ основная

Ρ‡Π°ΡΡ‚ΡŒ систСмы ΠΏΠΎΡΡ‚Π°Π²Π»ΡΠ»Π°ΡΡŒ Π² исходных тСкстах, написанных Π½Π°

языкС Π‘, ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌ программистам Π½Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ

Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ UNIX. Π‘ ростом

популярности микропроцСссоров

...

Π€Π°ΠΉΠ»Ρ‹, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Π² памяти

БистСмный Π²Ρ‹Π·ΠΎΠ² mmap(2) прСдоставляСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ, Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ read(2) ΠΈ write(2). Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого Π²Ρ‹Π·ΠΎΠ²Π° процСсс ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ участки Ρ„Π°ΠΉΠ»Π° Π² собствСнноС адрСсноС пространство. ПослС этого Π΄Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΠΈΠ»ΠΈ записаны ΠΏΡƒΡ‚Π΅ΠΌ чтСния ΠΈΠ»ΠΈ записи Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ. Ѐункция mmap(2) опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

#include <sys/types.h>

#include <sys/mman.h>


caddr_t mmap(caddr_t addr, size_t len, int prot,

 int flags, int fildes, off_t off);

Π­Ρ‚ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ² Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ len Π±Π°ΠΉΡ‚ΠΎΠ² Ρ„Π°ΠΉΠ»Π° с дСскриптором fildes, начиная со смСщСния off, Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти со стартовым адрСсом addr. РазумССтся, ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ mmap(2) Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ open(2). АргумСнт prot опрСдСляСт ΠΏΡ€Π°Π²Π° доступа ΠΊ области памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²Π°ΠΌ доступа ΠΊ Ρ„Π°ΠΉΠ»Ρƒ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π² систСмном Π²Ρ‹Π·ΠΎΠ²Π΅ open(2). Π’ Ρ‚Π°Π±Π». 2.12 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° prot ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ ΠΏΡ€Π°Π²Π° доступа ΠΊ Ρ„Π°ΠΉΠ»Ρƒ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ логичСскоС объСдинСниС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ prot. Π’Π°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ PROT_READ | PROT_WRITE соотвСтствуСт доступу O_RDWR ΠΊ Ρ„Π°ΠΉΠ»Ρƒ.


Π’Π°Π±Π»ΠΈΡ†Π° 2.12. ΠŸΡ€Π°Π²Π° доступа ΠΊ области памяти

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° prot ОписаниС ΠŸΡ€Π°Π²Π° доступа ΠΊ Ρ„Π°ΠΉΠ»Ρƒ PROT_READ ΠžΠ±Π»Π°ΡΡ‚ΡŒ доступна для чтСния r PROT_WRITE ΠžΠ±Π»Π°ΡΡ‚ΡŒ доступна для записи w PROT_EXEC ΠžΠ±Π»Π°ΡΡ‚ΡŒ доступна для исполнСния x PROT_NONE ΠžΠ±Π»Π°ΡΡ‚ΡŒ нСдоступна -

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ addr задаСтся Ρ€Π°Π²Π½Ρ‹ΠΌ 0, Ρ‡Ρ‚ΠΎ позволяСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс Π½Π°Ρ‡Π°Π»Π° области отобраТСния. Π’ любом случаС, ΠΏΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ систСмным Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ опрСдСляСт Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ располоТСниС области памяти.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма округляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ len Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ страницы Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти.[19] НапримСр, Ссли Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° 96 Π±Π°ΠΉΡ‚ΠΎΠ², Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ страницы 4 ΠšΠ±Π°ΠΉΡ‚, Ρ‚ΠΎ систСма всС Ρ€Π°Π²Π½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 4096 Π±Π°ΠΉΡ‚ΠΎΠ². ΠŸΡ€ΠΈ этом 96 Π±Π°ΠΉΡ‚ΠΎΠ² Π·Π°ΠΉΠΌΡƒΡ‚ собствСнно Π΄Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Π°, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ 4000 Π±Π°ΠΉΡ‚ΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ нулями. ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ 4000 Π±Π°ΠΉΡ‚ΠΎΠ², Π½ΠΎ эти измСнСния Π½Π΅ отразятся Π½Π° содСрТимом Ρ„Π°ΠΉΠ»Π°. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ участку памяти, Π»Π΅ΠΆΠ°Ρ‰Π΅ΠΌΡƒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°, ядро ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ процСссу сигнал SIGBUS[20]. НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ фактичСский Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°, процСсс Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ возмоТности ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€.

ИспользованиС ΠΏΡ€Π°Π²Π° Π½Π° исполнСниС (prot = PROT_EXEC) позволяСт процСссу ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ собствСнный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠΎΠ΄Π°. Π’ частности, Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ динамичСских связСй ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ динамичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΊΠΎΠ³Π΄Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° отобраТаСтся Π² адрСсноС пространство процСсса. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ PROT_NONE позволяСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ собствСнныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ контроля доступа ΠΊ раздСляСмым ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊ раздСляСмой памяти), Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ ΠΈΠ»ΠΈ запрСщая доступ ΠΊ области памяти.