


一、消息隊(duì)列的定義?
消息隊(duì)列能夠彌補(bǔ)管道的不足,實(shí)現(xiàn)雙向交互數(shù)據(jù),是一個(gè)進(jìn)程向另一進(jìn)程發(fā)送進(jìn)程塊的方法。與管道不同的是,管道是基于字節(jié)流的,消息隊(duì)列是基于消息的,且消息隊(duì)列的讀取不一定是先進(jìn)先出。
二、消息隊(duì)列的創(chuàng)建
通過函數(shù)int messget(key_t key,int msgflg);創(chuàng)建
key:端口號(hào),可以有 ftok生成。
msgflg:
IPC_CRTAT 若果 IPC不存在,則創(chuàng)建一個(gè)IPC資源,
IPC_EXCL:一般和 IPC_CREAT一起使用可以保證所得的對(duì)象是新建的,而不是打開已有的。
三、向消息隊(duì)列讀數(shù)據(jù)
msgrcv從隊(duì)列中取的消息
ssize_t msgrcv(int msqid,void *msgp,size_t msgsz,long msgtyp,int msgflg);
msgsnd將消息放進(jìn)隊(duì)列中
int msgsnd(int msqid,const void *msgp,size_t msgsz,int msgflg);
四、設(shè)置消息隊(duì)列屬性
int msgctl(int msgqid,int cmd,struct msqid_ds *buf);
*** 可以用man 函數(shù)名 查看函數(shù)***
程序代碼:
coom.h
1 #pragma once 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<sys/types.h> 6 #include<sys/ipc.h> 7 #include<sys/msg.h> 8 #define _PATH_ "." 9 #define _PROCID_ 0x776 10 #define _SIZE 1024 11 #define SERVE_MSGTYPE 1 12 #define CLIECT_MSGTYPE 2 13 typedef struct message 14 { 15 long mtype; 16 char mtext[_SIZE]; 17 }message; 18 int create_msg(int msg_num); 19 int drstroy_msg(int msg_id); 20 int set_msg(); 21 int get_msg(); 22 int msg_send(int msg_id,const char* msg,long type); 23 int msg_rec(int msg_id ,char buf[],long type);
comm .c
1 #include"comm.h" 2 int create_msg(int msg_num) 3 { 4 key_t _key=ftok(_PATH_,_PROCID_); 5 if(_key < 0) 6 { 7 perror("ftok"); 8 return -1; 9 } 10 int ret= msgget(_key,msg_num); 11 if(ret < 0) 12 { 13 perror("msgget"); 14 return -1; 15 } 16 return ret; 17 } 18 int drstroy_msg(int msg_id) 19 { 20 if(msgctl(msg_id,IPC_RMID,NULL) < 0) 21 { 22 perror("msgctl"); 23 return -1; 24 }else{ 25 printf("remove message_queue\n"); 26 return 0; 27 } 28 } 29 int set_msg() 30 { 31 umask(0); 32 return create_msg(IPC_CREAT |IPC_EXCL |0666); 33 } 34 int get_msg() 35 { 36 return create_msg(IPC_CREAT); 37 } 38 int msg_send(int msg_id,const char* msg,long type) 39 { 40 struct message _msg; 41 _msg.mtype=type; 42 strcpy(_msg.mtext,msg); 43 if(msgsnd(msg_id,&_msg,strlen(_msg.mtext),0)< 0) 44 { 45 perror("msg_send error"); 46 return -1; 47 } 48 return 0; 49 } 50 int msg_rec(int msg_id,char buf[],long type) 51 { 52 struct message _msg; 53 memset(_msg.mtext,'\0',_SIZE); 54 if(msgrcv(msg_id,&_msg,_SIZE,type,0)< 0) 55 { 56 perror("msg_receve error"); 57 return -1; 58 } 59 strcpy(buf,_msg.mtext); 60 return 0; 61 } 62
client.c
1 #include"comm.h" 2 int main() 3 { 4 int msg_id=get_msg(); 5 if(msg_id<0) 6 { 7 perror("error"); 8 exit(1); 9 } 10 char buf[_SIZE]; 11 while(1) 12 { 13 fflush(stdout); 14 printf("please client input: "); 15 memset(buf,'\0',_SIZE); 16 fgets (buf,sizeof(buf),stdin); 17 if(msg_send(msg_id,buf,CLIECT_MSGTYPE)< 0) 18 { 19 perror("send fail"); 20 exit(1); 21 } 22 23 if(msg_rec(msg_id,buf,SERVE_MSGTYPE)<0) 24 { 25 perror("recve fail"); 26 exit(1); 27 } 28 printf("serve:%s" ,buf); 29 } 30 return 0; 31 }
server.c
1 #include "comm.h" 2 int main() 3 { 4 int msg_id=set_msg(); 5 if(msg_id<0) 6 { 7 perror("mig_id"); 8 exit(1); 9 } 10 printf("%d\n",msg_id); 11 char buf[_SIZE]; 12 while(1) 13 { 14 if(msg_rec(msg_id,buf,CLIECT_MSGTYPE)< 0) 15 { 16 perror("recve fail"); 17 exit(1); 18 } 19 else 20 { 21 printf("client :%s",buf); 22 } 23 printf("server please input: "); 24 fflush(stdout); 25 memset(buf,'\0',_SIZE); 26 fgets(buf,_SIZE,stdin); 27 if(msg_send(msg_id,buf,SERVE_MSGTYPE)<0) 28 { 29 perror("send fail"); 30 exit(1); 31 } 32 } 33 drstroy_msg(msg_id); 34 return 0; 35 }
運(yùn)行結(jié)果:
以上就是Linux --進(jìn)程間通信--消息隊(duì)列的內(nèi)容,更多相關(guān)內(nèi)容請(qǐng)關(guān)注PHP中文網(wǎng)(www.miracleart.cn)!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à 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)

La clé de l'installation de deux systèmes dans Linux et Windows est le partitionnement et les paramètres de démarrage. 1. La préparation comprend la sauvegarde des données et la compression des partitions existantes pour faire de la place; 2. Utilisez Ventoy ou Rufus pour créer un disque USB Linux Boot, recommandez Ubuntu; 3. Sélectionnez "coexister avec d'autres systèmes" ou partition manuellement pendant l'installation (/ au moins 20 Go, / l'espace restant à domicile, échange facultatif); 4. Vérifiez l'installation de pilotes tiers pour éviter les problèmes matériels; 5. Si vous n'entrez pas dans le menu de démarrage GRUB après l'installation, vous pouvez utiliser la réparation de démarrage pour réparer le démarrage ou ajuster la séquence de démarrage du BIOS. Tant que les étapes sont claires et que l'opération est effectuée correctement, l'ensemble du processus n'est pas compliqué.

Les utilisateurs des débutants doivent d'abord clarifier leurs exigences d'utilisation lors du choix d'une distribution Linux. 1. Choisissez Ubuntu ou Linuxmint pour une utilisation quotidienne; La programmation et le développement conviennent à Manjaro ou Fedora; Utilisez Lubuntu et d'autres systèmes légers pour les anciens appareils; Recommander CentosStream ou Debian pour apprendre les principes sous-jacents. 2. La stabilité est préférée pour Ubuntults ou Debian; Vous pouvez choisir Arch ou Manjaro pour poursuivre de nouvelles fonctionnalités. 3. En termes de soutien communautaire, Ubuntu et Linuxmint sont riches en ressources et les documents d'arc sont orientés techniquement. 4. En termes de difficulté d'installation, Ubuntu et Linuxmint sont relativement simples et Arch convient à ceux qui ont des besoins de base. Il est recommandé de l'essayer d'abord, puis de décider.

Les étapes pour ajouter un nouveau disque dur au système Linux sont les suivantes: 1. Confirmez que le disque dur est reconnu et utilisez LSBLK ou FDISK-L pour vérifier; 2. Utilisez des partitions FDISK ou séparées, telles que FDISK / DEV / SDB et créer et enregistrer; 3. Format la partition sur un système de fichiers, tel que mkfs.ext4 / dev / sdb1; 4. Utilisez la commande Mount pour des supports temporaires, tels que le mont / dev / sdb1 / mnt / data; 5. Modifier / etc / fstab pour atteindre un montage automatique sur l'ordinateur et tester d'abord le support pour assurer l'exactitude. Assurez-vous de confirmer la sécurité des données avant le fonctionnement pour éviter les problèmes de connexion matérielle.

Vous avez des problèmes de téléchargement de fichiers dans Google Chrome? Cela peut être ennuyeux, non? Que vous joigniez des documents aux e-mails, partagez des images sur les réseaux sociaux ou soumettez des fichiers importants pour le travail ou l'école, un processus de téléchargement de fichiers en douceur est crucial. Ainsi, il peut être frustrant que vos téléchargements de fichiers continuent d'échouer dans Chrome sur PC Windows. Si vous n'êtes pas prêt à abandonner votre navigateur préféré, voici quelques conseils pour les correctifs qui ne peuvent pas télécharger de fichiers sur Windows Google Chrome 1. Commencez par une réparation universelle avant de découvrir les conseils de dépannage avancés, il est préférable d'essayer certaines des solutions de base mentionnées ci-dessous. Dépannage des problèmes de connexion Internet: connexion Internet

Les journaux dans les systèmes Linux sont généralement stockés dans le répertoire / var / journal, qui contient une variété de fichiers journaux clés, tels que Syslog ou Messages (enregistrements des journaux système), Auth.log (enregistrements d'événements d'authentification), Kern.log (Messages d'enregistrement du noyau), DPKG.Log ou Yum.log (Record Package Operations), boot.log (enregistrer les informations de démarrage); Le contenu du journal peut être visualisé via des commandes CAT, Tail-F ou JournalCTL; Les journaux d'applications sont souvent situés dans des sous-répertoires sous / var / log, tels que le répertoire Apache2 ou HTTPD d'Apache, les fichiers journaux MySQL, etc.; En même temps, il est nécessaire de noter que les autorisations de journal nécessitent généralement S

Sudo signifie "SubstituteUserdo" ou "SuperUserDo", permettant aux utilisateurs d'exécuter des commandes avec des autorisations d'autres utilisateurs (généralement root). Ses utilisations de base incluent: 1. Effectuer des opérations au niveau du système telles que l'installation de logiciels ou l'édition de fichiers système; 2. Accès aux répertoires ou journaux protégés; 3. Gérer des services tels que le redémarrage de Nginx; 4. Modifier les paramètres globaux tels que / etc / h?tes. Lorsque vous l'utilisez, le système vérifiera la configuration / etc / sudoers et vérifiera le mot de passe utilisateur, fournira des autorisations temporaires au lieu de se connecter en continu en tant que racine, garantissant la sécurité. Les meilleures pratiques incluent: uniquement lorsque cela est nécessaire, évitez d'exécuter aveuglément des commandes de réseau, éditer des fichiers sudoers avec Visudo et considérer les opérations continues.

Pour gérer les groupes d'utilisateurs Linux, vous devez ma?triser le fonctionnement de la visualisation, de la création, de la suppression, de la modification et du réglage des attributs de l'utilisateur. Pour afficher les informations du groupe d'utilisateurs, vous pouvez utiliser CAT / etc / groupe ou GetEntGroup, utilisez des groupes [nom d'utilisateur] ou ID [nom d'utilisateur] pour afficher le groupe auquel l'utilisateur appartient; Utilisez GroupADD pour créer un groupe et utilisez GroupDel pour spécifier le GID; Utilisez GroupDel pour supprimer des groupes vides; Utilisez UserMod-AG pour ajouter des utilisateurs au groupe et utilisez UserMod-G pour modifier le groupe principal; Utilisez UserMod-G pour supprimer les utilisateurs du groupe en modifiant / etc / groupe ou en utilisant la commande VIGR; Utilisez GroupMod-N (Nom de modification) ou GroupMod-G (modifier GID) pour modifier les propriétés du groupe et n'oubliez pas de mettre à jour les autorisations des fichiers pertinents.

Dans Linux Systems, 1. Utilisez la commande IPA ou HostName-I pour afficher la propriété intellectuelle privée; 2. Utilisez curlifconfig.me ou curlipinfo.io/ip pour obtenir une adresse IP publique; 3. La version de bureau peut afficher IP privé via les paramètres système, et le navigateur peut accéder à des sites Web spécifiques pour afficher la propriété IP publique; 4. Les commandes communes peuvent être définies sous forme d'alias pour un appel rapide. Ces méthodes sont simples et pratiques, adaptées aux besoins de visualisation IP dans différents scénarios.
