Comment partager de la mémoire entre les processus Linux
Le mécanisme de communication inter-processus de la mémoire partagée est principalement utilisé pour transférer de grandes quantités de données entre les processus. La figure suivante montre un diagramme schématique de l'utilisation de la mémoire partagée pour transférer de grandes quantités de données entre les processus :
La mémoire partagée est un espace mémoire ouvert séparément dans la mémoire. Cet espace mémoire possède sa propre structure de données unique, y compris les autorisations d'accès, la taille et l'heure d'accès récente. La structure des données est définie comme suit :
from /usr/include/linux/shm.h struct shmid_ds { struct ipc_perm shm_perm; /* operation perms 操作权限 */ int shm_segsz; /* size of segment (bytes) 段长度大小 */ __kernel_time_t shm_atime; /* last attach time 最近attach时间 */ __kernel_time_t shm_dtime; /* last detach time 最近detach时间 */ __kernel_time_t shm_ctime; /* last change time 最近change时间 */ __kernel_ipc_pid_t shm_cpid; /* pid of creator 创建者pid */ __kernel_ipc_pid_t shm_lpid; /* pid of last operator 最近操作pid */ unsigned short shm_nattch; /* no. of current attaches */ unsigned short shm_unused; /* compatibility */ void *shm_unused2; /* ditto - used by DIPC */ void *shm_unused3; /* unused */ };
Avant que deux processus n'utilisent cet espace de mémoire partagée, ils doivent établir une connexion entre l'espace d'adressage du processus et l'espace de mémoire partagée, c'est-à-dire monter l'espace de mémoire partagée dans le processus.
Le système impose les restrictions suivantes sur la mémoire partagée :
#define SHMMAX 0x2000000 /* max shared seg size (bytes) 最大共享段大小 */ #define SHMMIN 1 /* min shared seg size (bytes) 最小共享段大小 */ #define SHMMNI 4096 /* max num of segs system wide */ #define SHMALL (SHMMAX/getpagesize()*(SHMMNI/16)) #define SHMSEG SHMMNI /* max shared segs per process */
#include <sys> #include <sys></sys></sys>
/*
* Le premier paramètre est la valeur clé, généralement générée par la fonction ftok()
* Le deuxième paramètre est la taille du segment de mémoire partagée à créer (en octets)
* Le troisième paramètre permet d'identifier l'identifiant de création du segment de mémoire partagée
*/
int shmget(key_t key, size_t size, int shmflg);
#include <sys> #include <sys></sys></sys>
/*
* Le premier paramètre est l'identifiant de la mémoire partagée à exploiter
* Le deuxième paramètre est l'opération à effectuer
* Le troisième paramètre est l'information variable de mémoire partagée temporaire de la structure shmid_ds
*/
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
La fonction d'appel système shmat() mappe un segment de mémoire partagée au segment de données du processus appelant et renvoie la première adresse de l'espace mémoire. Sa fonction est déclarée comme suit :
#include <sys> #include <sys> </sys></sys>
/*
* Le premier paramètre est l'identifiant de la mémoire partagée à exploiter
* Le deuxième paramètre est utilisé pour spécifier l'adresse mappée de la mémoire partagée. S'il n'est pas 0, ce paramètre sera alloué par le système
.
* Le troisième paramètre est utilisé pour spécifier les autorisations d'accès et les conditions de mappage du segment de mémoire partagée
*/
void *shmat(int shmid, const void *shmaddr, int shmflg);
Après avoir utilisé l'espace mémoire partagé, vous devez utiliser l'appel de fonction shmdt() pour le séparer du processus en cours. La déclaration de la fonction est la suivante :
#include <sys> #include <sys> </sys></sys>
/*
* Le paramètre est la première adresse de la mémoire partagée allouée
*/
int shmdt(const void *shmaddr);
1. Après avoir utilisé la fonction fork() pour créer un processus enfant, le processus hérite de la mémoire partagée montée par le processus parent.
2. Si exec() est appelé pour exécuter un nouveau programme, toute la mémoire partagée montée sera automatiquement démontée.
3. Si la fonction exit() est appelée dans un processus, toute la mémoire partagée montée sera déconnectée du processus en cours.
Demandez une mémoire partagée, le processus parent stocke un entier à la première adresse et le processus enfant le lit.
#include #include <sys> #include <sys> #include <sys> #include #include #define SHM_SIZE 1024 int main() { int shm_id, pid; int *ptr = NULL; </sys></sys></sys>
/* Demander une mémoire partagée */
shm_id = shmget((key_t)1004, SHM_SIZE, IPC_CREAT | 0600);
/* Mapper la mémoire partagée pour traiter l'espace d'adressage */
ptr = (int*)shmat(shm_id, 0, 0); printf("Attach addr is %p \n", ptr); *ptr = 1004; printf("The Value of Parent is : %d \n", *ptr); if((pid=fork()) == -1){ perror("fork Err"); exit(0); } else if(!pid){ printf("The Value of Child is : %d \n", *ptr); exit(0); }else{ sleep(1);
/* Démapper */
shmdt(ptr);
/* Supprimer la mémoire partagée */
shmctl(shm_id, IPC_RMID, 0); } return 0; }
Résultat de sortie :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds





Vs Code Système Exigences: Système d'exploitation: Windows 10 et supérieur, MacOS 10.12 et supérieur, processeur de distribution Linux: minimum 1,6 GHz, recommandé 2,0 GHz et au-dessus de la mémoire: minimum 512 Mo, recommandée 4 Go et plus d'espace de stockage: Minimum 250 Mo, recommandée 1 Go et plus d'autres exigences: connexion du réseau stable, xorg / wayland (Linux) recommandé et recommandée et plus

Les raisons de l'installation des extensions de code vs peuvent être: l'instabilité du réseau, les autorisations insuffisantes, les problèmes de compatibilité système, la version de code vs est trop ancienne, un logiciel antivirus ou des interférences de pare-feu. En vérifiant les connexions réseau, les autorisations, les fichiers journaux, la mise à jour vs du code, la désactivation des logiciels de sécurité et le redémarrage du code ou des ordinateurs, vous pouvez progressivement dépanner et résoudre les problèmes.

VS Code est disponible sur Mac. Il a des extensions puissantes, l'intégration GIT, le terminal et le débogueur, et offre également une multitude d'options de configuration. Cependant, pour des projets particulièrement importants ou un développement hautement professionnel, le code vs peut avoir des performances ou des limitations fonctionnelles.

VS Code est le code Visual Studio Nom complet, qui est un éditeur de code multiplateforme gratuit et open source et un environnement de développement développé par Microsoft. Il prend en charge un large éventail de langages de programmation et fournit une mise en surbrillance de syntaxe, une complétion automatique du code, des extraits de code et des invites intelligentes pour améliorer l'efficacité de développement. Grâce à un écosystème d'extension riche, les utilisateurs peuvent ajouter des extensions à des besoins et des langues spécifiques, tels que les débogueurs, les outils de mise en forme de code et les intégrations GIT. VS Code comprend également un débogueur intuitif qui aide à trouver et à résoudre rapidement les bogues dans votre code.

Visual Studio Code (VSCODE) est un éditeur de code Open Source, Open Source et gratuit développé par Microsoft. Il est connu pour son léger, l'évolutivité et le support pour une large gamme de langages de programmation. Pour installer VScode, veuillez visiter le site officiel pour télécharger et exécuter l'installateur. Lorsque vous utilisez VSCODE, vous pouvez créer de nouveaux projets, modifier le code, déboguer le code, naviguer dans les projets, développer VSCODE et gérer les paramètres. VScode est disponible pour Windows, MacOS et Linux, prend en charge plusieurs langages de programmation et fournit diverses extensions via Marketplace. Ses avantages incluent le léger, l'évolutivité, le support linguistique étendu, les fonctionnalités riches et la version

Bien que le bloc-notes ne puisse pas exécuter directement le code Java, il peut être réalisé en utilisant d'autres outils: à l'aide du compilateur de ligne de commande (Javac) pour générer un fichier bytecode (filename.class). Utilisez l'interpréteur Java (Java) pour interpréter ByteCode, exécuter le code et sortir le résultat.

Les principales utilisations de Linux comprennent: 1. Système d'exploitation du serveur, 2. Système intégré, 3. Système d'exploitation de bureau, 4. Environnement de développement et de test. Linux excelle dans ces domaines, offrant des outils de stabilité, de sécurité et de développement efficaces.

Pour afficher l'adresse du référentiel GIT, effectuez les étapes suivantes: 1. Ouvrez la ligne de commande et accédez au répertoire du référentiel; 2. Exécutez la commande "git Remote -v"; 3. Affichez le nom du référentiel dans la sortie et son adresse correspondante.
