msync(2)

NUME
msync - sincronizează un fișier cu o hartă din memorie

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <sys/mman.h>

int msync(size_t length;
          void addr[length], size_t length, int flags);

DESCRIERE
msync() trimite înapoi în sistemul de fișiere modificările aduse copiei din nucleu a unui fișier care a fost cartografiat în memorie utilizând mmap(2). Fără utilizarea acestui apel, nu există nicio garanție că modificările sunt scrise înapoi înainte de apelarea munmap(2). Pentru a fi mai precis, partea din fișier care corespunde zonei de memorie care începe la addr și are lungimea length este actualizată.

Argumentul flags trebuie să specifice exact unul dintre MS_ASYNC și MS_SYNC și poate include în plus bitul MS_INVALIDATE. Acești biți au următoarele semnificații:

MS_ASYNC
    Precizează că o actualizare este planificată, dar apelul se întoarce imediat.

MS_SYNC
    Solicită o actualizare și așteaptă ca aceasta să fie finalizată.

MS_INVALIDATE
    Solicită invalidarea altor hărți ale aceluiași fișier (astfel încât acestea să poată fi actualizate cu valorile noi care tocmai au fost scrise).

VALOAREA RETURNATĂ
În caz de succes, se returnează zero. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

EBUSY
    MS_INVALIDATE a fost specificat în flags și există o blocare a memoriei pentru intervalul de adrese specificat.

EINVAL
    addr nu este un multiplu de PAGESIZE; sau orice alt bit decât MS_ASYNC | MS_INVALIDATE | MS_SYNC este definit în flags; sau atât MS_SYNC cât și MS_ASYNC sunt definite în flags.

ENOMEM
    Memoria indicată (sau o parte a acesteia) nu a fost cartografiată.

VERSIUNI
În conformitate cu POSIX, fie MS_SYNC, fie MS_ASYNC trebuie să fie specificat în flags și, într-adevăr, dacă nu se include unul dintre aceste fanioane, msync() va eșua pe unele sisteme. Cu toate acestea, Linux permite un apel la msync() care nu specifică niciunul dintre acești indicatori, cu o semantică care este (în prezent) echivalentă cu specificarea MS_ASYNC. (Începând cu Linux 2.6.19, MS_ASYNC este, de fapt, o non-opțiune, deoarece nucleul urmărește în mod corespunzător paginile modificate și le elimină din memorie în funcție de necesități). În pofida comportamentului Linux, aplicațiile portabile și cu perspective de viitor ar trebui să se asigure că specifică fie MS_SYNC, fie MS_ASYNC în flags.

STANDARDE
POSIX.1-2024.

ISTORIC
SUSv1, POSIX.1-1996.

Acest apel a fost introdus în Linux 1.3.21, iar atunci se folosea EFAULT în loc de ENOMEM. În Linux 2.4.19, aceasta a fost schimbată cu valoarea POSIX ENOMEM.

Pe sistemele POSIX pe care este disponibil msync(), atât _POSIX_MAPPED_FILES, cât și _POSIX_SYNCHRONIZED_IO sunt definite în <unistd.h> la o valoare mai mare decât 0. (A se vedea, de asemenea, sysconf(3).)

CONSULTAȚI ȘI
mmap(2)

B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128–129 și 389–391.

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.