Funzione msync 2 c

Funzione msync 2 c
Hai mai sentito parlare di alcune funzioni che utilizzano e gestiscono la memoria di un sistema in Linux? La funzione msync () è una di queste. Il metodo sincronizza il contenuto del file con il contenuto corrente dell'area. È stato ampiamente noto tra gli utenti Linux per sincronizzare la memoria con l'archiviazione fisica di un sistema. All'interno di questo articolo, spiegheremo la sua sintassi e l'uso. Per questo, esamineremo ciascuno dei suoi argomenti uno per uno.

Sintassi:

#includere
Int msync (void * addr, size_t len, int flags);

ADDR: L'inizio degli indirizzi che desideri sincronizzare come un intervallo.

Len: Il numero della lunghezza delle posizioni espressa in byte.

Spiegazione:

All'interno di queste pagine complete che comprendono qualsiasi parte dello spazio degli indirizzi del processo, a partire dall'indirizzo ADDR e in esecuzione per byte di lunghezza, il metodo MSYNC () deve scrivere tutte le informazioni aggiornate ad aree di archiviazione persistenti. Msync () non dovrebbe avere un impatto se non esiste tale memoria. Il metodo Msync () rimuoverà quindi i backup delle informazioni memorizzati. ADDR deve essere un multiplo del numero di pagine fornite dalla funzione sysconf () affinché l'implementazione funzioni.

Il metodo MSYNC (*) deve assicurarsi che tutti i processi di scrittura siano finiti come richiesto per la completezza della sicurezza dei dati I/O sincronizzata per le mappature ai documenti. L'implementazione può facoltativamente scrivere caratteristiche di file aggiuntive, sebbene questo non sia definito. Eventuali dati aggiornati non devono essere trasferiti all'oggetto core o reso liberamente disponibile per alcune altre operazioni ogni volta che il metodo MSYNC () viene eseguito su traduzioni MAP_Private. Non è noto dove le informazioni nelle traduzioni MAP_Private sono archiviate in modo permanente. [Shm | tym] [Choice start] msync () non specifica se influisce sugli oggetti di memoria condivisa o gli oggetti di archiviazione digitati.

Fine dell'opzione: se una richiesta di mappa non è stata utilizzata per creare la traduzione, la funzionalità di questo metodo è indefinita.

Opzioni flag disponibili per msync ()

Il parametro delle opzioni è composto da Bitwise-inclusive o di diversi flag elencati nei seguenti che sono specificati nel file di intestazione "Sys/Mman.H":

  • Ms_async: Eseguire la scrittura simultanea
  • Ms_invalidate: Mappature imprecise
  • Ms_sync: Eseguire la scrittura simultanea
  • Ms_cache_only: Poiché QNX Neutrino attualmente supporta la compatibilità POSIX per i documenti mappati dalla memoria, Msync () esegue lo scopo desiderato di scrivere modifiche nella memoria tradotta nel file effettivo. Solo cache MS (aggiunta QNX Neutrino; QNX Neutrino Core OS 6.3.2 o superiore). Se si preferisce l'aggiunta di QNX Neutrino al comportamento standard POSIX, utilizzare questo bit per istruire il metodo per scaricare o saturare la cache dei dati (attraverso i flag di MS Async, MS Sync o MS invalidate).
  • Se stai modificando dinamicamente il codice, utilizzare l'estensione QNX Neutrino MS Invalidate ICache per assicurarti che il codice aggiornato sia ciò che viene eseguito.
  • Lavorare solo su pagine pulite con solo QNX Neutrino Extension MS_CLEAN (versione 7.0 o successivo).

Prima della richiesta, tutti i collegamenti di scrittura alla memoria del sistema erano accessibili ai processi di lettura successivi sul documento. Non è chiaro se i puntatori di lettura nell'area di archiviazione possano accedere alle modifiche alla stessa area del documento che è stato effettuato anche prima della richiesta. Se le pagine inalterate all'interno dell'intervallo particolare vengono inoltre scritte sull'hardware fondamentale, questo non è menzionato. Quando sono programmati tutti i processi di scrittura, il metodo può rispondere immediatamente se il flag è ms_async. Quando i flag sono ms_sync, il metodo in qualche modo non ritorna a meno che tutti i processi di scrittura non siano finiti.

Sincronizzando i dati della regione di archiviazione con le informazioni esistenti memorizzate, MS_Invalidate li fa coincidere. Gli accessi di lettura successivi all'area di archiviazione collegati possono vedere tutte le scritture nell'area tradotta del documento che è stata effettuata anche prima della richiesta. Non è chiaro se i puntatori di lettura alle aree di archiviazione che sono state tradotte nella stessa area del documento utilizzando Map_Shared anche prima di chiamare qualsiasi funzione sarebbero in grado di vedere l'area. Le colonne ST_CTIm e ST_MTime del file vengono contrassegnate per l'aggiornamento se l'utilizzo della funzione MSYNC () si traduce in qualsiasi operazione di scrittura eseguita nella directory.

Valore restituito:

  • La funzione Msync () produce 0 se è completato.
  • La funzione msync () emette -1 e assegna un errno a uno dei seguenti parametri di errore se non riesce a.

Uso dell'applicazione:

Il metodo Msync () non deve essere accessibile su tutte le varianti poiché è consentito solo se vengono forniti i documenti mappati di archiviazione e le opzioni in entrata e in uscita coordinate. Le applicazioni che necessitano di un oggetto di archiviazione siano in una posizione definita come quelle che forniscono strutture di transazione, devono utilizzare il metodo MSYNC (). Le pagine possono essere trasferite al disco durante l'attività del sistema di routine.

Non c'è certezza che msync () sembri essere l'unico fattore che influenza se le pagine vengano trasferite in disco. Il metodo Msync () invia i dati da un'area mappata alla memoria persistente dell'entità di base. L'integrità dei dati del documento è garantita dalla richiesta a msync (). Se in qualche modo è stato fornito il flag ms_invalidate, è possibile scadere dati memorizzati quando i dati vengono inseriti. Sulle piattaforme che non forniscono integrità di lettura/scrittura, questo è utile.

Esempio:

Abbiamo creato un nuovo file C utilizzando l'istruzione VIM sulla shell. Viene creato nella cartella Project1 del nostro sistema Kali Linux secondo l'uscita dell'elenco istruzioni "LS" nella seguente immagine, i.e. “MySync.C".

Per aprire questo file, utilizziamo l'editor VIM secondo le seguenti istruzioni:

Il file vuoto si apre all'interno dell'editor VIM del nostro sistema. Aggiungiamo prima le intestazioni necessarie in questo file di codice. Lo stdio.H, unistd.H e stringa.H vengono utilizzati per ottenere l'ingresso e l'output standard. Mentre l'uso di "sys/mman.h "e fcntl.H vengono utilizzati per utilizzare la funzione e i file msync () nel codice. La funzione principale () inizializza il valore del descrittore di file su -1 e ottiene la dimensione della pagina utilizzando la funzione getPageSize (). Apriamo il "Newfile.File txt ”all'interno della modalità di lettura e scrittura. Se non esiste un file con questo nome, l'opzione "O_Create" ne crea una nuova.

Il valore restituito è memorizzato nel descrittore dei file e l'istruzione "if" lo utilizza per vedere se il valore è inferiore a 0 o no. In tal caso, stamperà che "apertura del file non riuscita". Il puntatore Map_Address viene utilizzato per mappare l'indirizzo di un file e se fallisce, l'istruzione "if" stamperà il rispettivo messaggio di errore. La funzione strcpy () è qui per copiare una stringa in una variabile Map_Address e l'istruzione "if-else" utilizza la funzione msync () per sincronizzare la memoria mappata nel file e visualizzare il rispettivo output, i.e. fallito o riuscito.

Abbiamo compilato questo file C con il compilatore GCC e creato il suo file di oggetti. Quindi, abbiamo eseguito il suo file di oggetti e abbiamo ricevuto il messaggio che la memoria mappata è stata sincronizzata correttamente al file.

Conclusione

Questo riguarda l'uso della funzione Msync () 2 di C nel nostro sistema. Abbiamo discusso della sua sintassi insieme al suo parametro, separatamente. Abbiamo anche discusso delle opzioni utilizzate al suo interno e degli errori che possiamo ottenere dal suo fallimento. Abbiamo aggiunto un esempio dettagliato per spiegare il suo utilizzo nel linguaggio di programmazione C.