begin process at 2012 05 29 04:34:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

GUI

 > 

files de messages


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

files de messages

dimanche 23 mars 2008 à 10:44:36 | files de messages

spark01

Bonjours

Je voudrai savoir si la taille d'une file de message est fixe ou dynamique  

Dans la taille augmente au nombre de message envoyer dans cette files

short msg_cbytes;     /* taille  de la file */

cette instruction permet de fixer la taille de la fille

ou de donner la  taille actuelle de la file

et dans le cas ou j'ai plusieurs processus qui envoi des msg dans cette file

et un qui les récupère dois je  assurer l'exclusion mutuelle a cette fille

problème de producteur consommateur

ou la synchronisation est assurer par la structure des files des messages

merci d'avance

dimanche 23 mars 2008 à 13:12:07 | Re : files de messages

deck_bsd

Membre Club
Yop,

Utilise les mutex et les semaphore, je cherche du coté des sem_create , mutex_create, sem_puts ,...

++
deck_bsd
___________________________________
[ [ Lien ]]
lundi 24 mars 2008 à 12:22:11 | Re : files de messages

spark01

merci
mais j'ai trouvé que la synchronisation est assurée par la file elle-même car lorsqu'un message est récupéré, il est automatiquement supprimé de la file

pour les semaphore


#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/sem.h>
int semget(key_t key, int nsems, int semflg);
int semop(int semid, struct sembuf *sops, unsigned nsops);
int semctl(int semid, int semnum, int cmd, union semun arg);


La fonction semget() demande à travailler sur le sémaphore généralisé identifié par la clef key (cf. ci-dessus), et qui contient nsems sémaphores individuels. Un nouveau sémaphore est créé, avec les droits données par les 9 bits de poids faible de semflg, si key est IPC_PRIVATE, ou si semflg contient IPC_CREAT.
La fonction semop() agit sur le sémaphore semid en appliquant simultanément à plusieurs sémaphores individuels les actions décrites dans les nsops premiers éléments du tableau sops.


struct sembuf {
...
short sem_num;
short sem_op;
short sem_flg;
}


sem_num est le numéro du sémaphore individuel sur lequel porte l'opération
sem_op est un entier destiné (sauf s'il est nul) à être ajouté à la valeur courante semval du sémaphore. L'opération se bloque si sem_op + semval < 0. Cas particulier : si sem_op est 0, l'opération est bloquée tant que semval est non nul. Rq : les valeurs des sémaphores ne sont mises à jour que lorsqu'aucun d'eux n'est bloqué.
La fonction semctl permet de réaliser diverses opérations sur les sémaphores, selon la commande demandée. En particulier, on peut fixer le n-ième sémaphore à la valeur val en faisant semctl(sem, n, SETVAL, val);



#include <unistd.h>
#include <sys/time.h>
#include <sys/sem.h>
#include <signal.h>
#include <errno.h>
#include <stdio.h>

// Opération V ( +1 ) sur le 1er sémaphore de l'ensemble d'id sem.
void V( int sem )
{
struct sembuf buf;
buf.sem_num = 0;
buf.sem_op = 1;
buf.sem_flg = 0;
// printf("< V(%d) dans pid %d . \n", sem, getpid() );
semop( sem, &buf, 1 );
// printf("V(%d) dans pid %d. > \n", sem, getpid() );
}

// Opération P ( -1 ) sur le 1er sémaphore de l'ensemble d'id sem.
void P( int sem )
{
struct sembuf buf;
buf.sem_num = 0;
buf.sem_op = -1;
buf.sem_flg = 0;
// printf("< P(%d) dans pid %d . \n", sem, getpid() );
semop( sem, &buf, 1 );
// printf("P(%d) dans pid %d. > \n", sem, getpid() );
}

int new_semaphore( char id )
{
int _id, err;
// printf("semaphore %d en création.\n", id );
_id = semget( ftok( ".", id ), 1, IPC_CREAT | IPC_EXCL | 0777 );
if ( _id == -1 )
{
printf("semget id : %c.\n", id );
perror( "semget()" );
exit( -1 );
return -1;
}
err = semctl( _id, 0, SETVAL, 1 );
if ( err == -1 )
{
perror( "semclt(SETVAL)" );
exit( -1 );
return -1;
}
// printf("semaphore %d crée ->%d \n", id, _id );
return _id;
}

// détruit l'ensemble de sémaphores identifié par sema.
void kill_semaphore( int sema )
{
// printf("kill semaphore %d.\n", sema );
semctl( sema, 0, IPC_RMID, NULL );
}


et voila un cours de Frédéric Lang : http://fr.lang.free.fr/cours/IPC_Csyst_v1.0.pdf


Cette discussion est classée dans : message, taille, file, messages, files


Répondre à ce message

Sujets en rapport avec ce message

file de message [ par hobbes ] Bonjour,J'ai une application composée de deux process. Je souhaite faire circuler des messages entre les deux. On m a demande de faire cela grace à un Gérer les messages d'erreur de TClientSocket [ par internetservices ] Salut,je suis en train de créer un programme en C++ utilisant les sockets. J'ai lu que pour éviter d'avoir le message par défaut de windows "raised ex reponse au sujet : travail sur les files [ par tagada_du_loft ] Yahoo :) j ai reussi pour infos voila mes deux ti prog sur les files et les pilescelui sur les piles: -creer une pile -depile -affiche le sommet de probleme de listage de fichiers [ par Kevin972 ] salut!! je ne comprends pas la fonction ne liste rien du tout.........al'aide!!!!!!!!!!!!!!!!! voici ma fonction:#include#include#include#include#in ouverture de fichier avec les MFC [ par steph76 ] Bonjourvoila je programme une application qui ha beusoin d'ouvrir 1 fichier via httpJ'ai donc fait le code suivantCStdioFile *file;CInternetSession IS prob socket [ par flatou ] salutj'ai créé une appli serveur, banale : un client se connecte, il envoi un message et le serveur affiche le message.j'ai utilisé cela pour la recep les messages en API [ par Adeon ] salut!En API il intervient toujours cette partie de codes qui suit qui gere les messages fenetres.J'aimerai que qq m'explique ce que font les fonction Comment recuperer la longueur d un message [ par adess00 ] SalutJe voudrai savoir comment recuperer la longueur d un lessage que l utilisateur entreet je voudrai savoir comment faire pour declarer une variable Aidez moi à comprendre ce programme please. [ par Sneakito ] Voilà, j'ai un programme à présenter demain mais je ne le comprends pas très bien:#include #include int main(int argc, char *argv[])< taille maximum d une valeur [ par maloudre ] bonjour a tousje suis en train de faire un petit prog en c++ sous linux et j ai un petit prob ...j aimerai savoir si cette declaration de variable : l


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales