Fonction MSYNC 2 C

Fonction MSYNC 2 C
Avez-vous déjà entendu parler d'une fonction utilisant et gérer la mémoire d'un système dans Linux? La fonction MSYNC () est l'une d'entre elles. La méthode synchronise le contenu du fichier avec le contenu actuel de la zone. Il a été largement connu parmi les utilisateurs de Linux pour synchroniser la mémoire avec le stockage physique d'un système. Dans cet article, nous expliquerons sa syntaxe et son utilisation. Pour cela, nous passerons par chacun de ses arguments un par un.

Syntaxe:

#inclure
Int mSync (void * addr, size_t len, int int draps);

Addr: Le début des adresses que vous souhaitez synchroniser comme portée.

Len: Le nombre de la longueur des emplacements exprimés en octets.

Explication:

Dans ces pages complètes qui constituent une partie de l'espace d'adressage du processus, en commençant à l'adresse addr et en fonctionnant pour des octets de longueur, la méthode MSync () doit écrire toutes les informations mises à jour vers des zones de stockage persistantes. MSync () ne devrait pas avoir d'impact s'il n'y a pas de mémoire de ce type. La méthode MSYNC () supprimera ensuite les sauvegardes stockées d'informations si nécessaire. Addr doit être un multiple du nombre de pages fournies par la fonction sysconf () pour que l'implémentation fonctionne.

La méthode MSYNC (*) doit s'assurer que tous les processus d'écriture sont terminés, selon les besoins pour la sécurité synchronisée de la sécurité des données d'E / S pour les mappages aux documents. La mise en œuvre peut élaborer élaborer des caractéristiques de fichiers supplémentaires, bien que cela ne soit pas défini. Toutes les données mises à jour ne doivent pas être transférées dans l'objet central ou mises librement disponibles pour certaines autres opérations chaque fois que la méthode MSync () est effectuée sur les traductions MAP_Private. On ne sait pas où les informations dans les traductions MAP_Private sont stockées en permanence. [Shm | tym] [Choice start] MSYNC () ne spécifie pas s'il affecte les objets de mémoire partagés ou les objets de stockage typés.

Fin de l'option: Si une demande de carte n'a pas été utilisée pour créer la traduction, la fonctionnalité de cette méthode n'est pas définie.

Options de drapeau disponibles pour MSYNC ()

Le paramètre Options est composé de l'inclusivité bitwise ou de plusieurs drapeaux énumérés dans les éléments suivants qui sont spécifiés dans le fichier d'en-tête «SYS / MMAN.h ”:

  • MS_ASYNC: Effectuer une écriture simultanée
  • Ms_invalidate: Mappages inexacts
  • MS_SYNC: Effectuer une écriture simultanée
  • Ms_cache_only: Étant donné que QNX Neutrino prend actuellement en charge la compatibilité POSIX pour les documents mappés par la mémoire, MSYNC () effectue le but souhaité d'écrire des modifications dans la mémoire traduite dans le fichier réel. MS Cache uniquement (ajout de neutrinos QNX; QNX Neutrino Core OS 6.3.2 ou plus). Si vous préférez l'ajout de neutrinos QNX au comportement standard POSIX, utilisez ce bit pour instruire la méthode pour rincer ou saturer le cache de données (via les indicateurs MS Async, MS ou invalider les drapeaux).
  • Si vous modifiez dynamiquement le code, utilisez l'extension QNX Neutrinos MS invalider ICACHE pour vous assurer que le code mis à jour est ce qui est exécuté.
  • Travaillez uniquement sur les pages nettoyées avec l'extension QNX Neutrino MS_CLEAN uniquement (version 7.0 ou version ultérieure).

Avant la demande, tous les liens d'écriture vers la mémoire du système étaient accessibles aux processus de lecture suivants sur le document. Il n'est pas clair si les pointeurs de lecture vers la zone de stockage peuvent accéder aux modifications à la même zone du document qui a été faite avant même la demande. Si les pages non modifiées de la plage particulière sont également écrites dans le matériel fondamental, cela n'est pas mentionné. Lorsque tous les processus d'écriture sont planifiés, la méthode peut répondre immédiatement si l'indicateur est MS_ASYNC. Lorsque les drapeaux sont MS_SYNC, la méthode ne revient en quelque sorte que si tous les processus d'écriture sont terminés.

En synchronisant les données de la région de stockage avec les informations existantes stockées, MS_Invalidate les fait coïncider. Les accès de lecture successifs à la zone de stockage liée peuvent voir toutes les écritures à la zone traduite du document qui a été faite avant même la demande. Il n'est pas clair si la lecture pointe vers les zones de stockage qui ont été traduites dans la même zone du document en utilisant le map_shared avant même d'appeler à travers une fonction pourraient voir la zone. Les colonnes ST_CTIME et ST_MTIME du fichier sont signalées pour la mise à jour si l'utilisation de la fonction MSync () entraîne des opérations d'écriture effectuées dans le répertoire.

Valeur renvoyée:

  • La fonction MSYNC () donne 0 si elle est terminée.
  • La fonction MSYNC () sortira -1 et attribue un errno à l'un des paramètres d'erreur suivants s'il échoue.

Utilisation de l'application:

La méthode MSync () ne doit pas être accessible sur toutes les variantes car elle n'est autorisée que si les documents mappés de stockage et les options entrantes et sortantes coordonnées sont fournies. Les applications qui ont besoin d'un objet de stockage pour être dans une position définie comme celles qui fournissent des installations de transaction, doivent utiliser la méthode MSync (). Les pages peuvent être transférées sur le disque pendant l'activité du système de routine.

Il n'y a aucune certitude que MSync () semble être le seul facteur qui influence si les pages sont transférées ou non sur le disque. La méthode MSYNC () envoie les données d'une zone mappée au stockage persistant de l'entité de base. L'intégrité des données du document est assurée par la demande à MSync (). Si en quelque sorte l'indicateur MS_Invalidate était fourni, toutes les données stockées peuvent être expirées lorsque les données sont entrées. Sur les plateformes qui ne fournissent pas d'intégrité de lecture / écriture, cela est utile.

Exemple:

Nous avons créé un nouveau fichier C en utilisant l'instruction VIM sur le shell. Il est créé dans le dossier Project1 de notre système Kali Linux conformément à la sortie de l'instruction «LS» de la liste dans l'image suivante, i.e. «MySync.C ".

Pour ouvrir ce fichier, nous utilisons l'éditeur VIM conformément aux instructions suivantes:

Le fichier vide s'ouvre dans l'éditeur VIM de notre système. Nous ajoutons d'abord les en-têtes nécessaires dans ce fichier de code. Le stdio.H, unistd.H, et chaîne.H sont utilisés pour obtenir l'entrée et la sortie standard. Alors que l'utilisation de «Sys / Mman.h ”et fcntl.h sont utilisés pour utiliser la fonction MSync () et les fichiers dans le code. La fonction Main () initialise la valeur du descripteur de fichier à -1 et obtient la taille de la page en utilisant la fonction getPageSize (). Nous ouvrons le «newfile.Fichier txt ”dans le mode de lecture et d'écriture. S'il n'y a pas de fichier avec ce nom, l'option "O_Create" en crée une nouvelle.

La valeur renvoyée est stockée dans le descripteur de fichier et l'instruction «IF» l'utilise pour voir si la valeur est inférieure à 0 ou non. Si c'est le cas, il imprimera que «l'ouverture du fichier a échoué». Le pointeur MAP_ADDRESS est utilisé pour cartographier l'adresse d'un fichier et en cas d'échec, l'instruction «IF» imprimera le message d'erreur respectif. La fonction strcpy () est là pour copier une chaîne sur une variable MAP_ADDRESS et l'instruction "if-else" utilise la fonction MSync () pour synchroniser la mémoire mappée dans le fichier et afficher la sortie respective, i.e. Échec ou réussi.

Nous avons compilé ce fichier C avec le compilateur GCC et créé son fichier d'objet. Ensuite, nous avons exécuté son fichier d'objet et avons fait le message que la mémoire mappée a été synchronisée avec succès avec le fichier.

Conclusion

Il s'agit de l'utilisation de la fonction MSync () 2 de C dans notre système. Nous avons discuté de sa syntaxe avec son paramètre, séparément. Nous avons également discuté des options qui y sont utilisées et des erreurs que nous pouvons obtenir de son échec. Nous avons ajouté un exemple détaillé pour expliquer son utilisation dans le langage de programmation C.