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

C++ & C++ .NET

 > 

Windows

 > 

Fichier & Disque

 > 

File Mapping entre 2 programmes


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

File Mapping entre 2 programmes

mardi 16 octobre 2007 à 16:36:13 | File Mapping entre 2 programmes

Arkadias

Bonjour,
Je développe une application ou il sera nécessaire à 2 programmes différents (mais éxecuté sur la même machine) d'échanger les données d'un buffer. Pour ce faire j'ai tenté de me faire un petit programme de test mais j'ai un problème.

Contexte : Un des 2 programmes (qu'on va appeler Prog1) va seulement écrire dans le buffer, Prog2 quand à lui ira seulement le lire.

Problème : J'arrive bien à écrire dans le buffer y a pas de soucis par contre je n'arrive pas à lire le buffer à partir du Prog2.

Mon code :

Prog1 :
{
 unsigned char buffer[10]={97,98,99};
 unsigned long ecrit;
 bool write = false;

HANDLE hFile = CreateFile("test.txt",GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, 0);
 if (hFile == INVALID_HANDLE_VALUE)
  AfxMessageBox("Erreur Create");

 HANDLE hMapping = CreateFileMapping(hFile,NULL, PAGE_READWRITE, 0, 3, "Buffer");
 if (hMapping == NULL)
  AfxMessageBox("Erreur Mapping");

 write = WriteFile(hFile,buffer,3, &ecrit, NULL);
 SetFilePointer (hFile,0, NULL, FILE_BEGIN);
 system("PAUSE"); //Je fais juste une pause pour lancer le 2ème programme sans fermer le handle)
 CloseHandle(hFile); 
}


Prog2 :
{
 HANDLE hMapping;
 LPVOID Map;
 unsigned long ecrit;
 bool read = false;
 unsigned char buffer[10];

 hMapping = OpenFileMapping(FILE_MAP_READ, 0, "Buffer");
 if (!hMapping)
  AfxMessageBox("Erreur Open Mapping");

 Map = MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0);
 if (!Map)
  CloseHandle(hMapping);

 read = ReadFile(Map,buffer,3,&ecrit, NULL);
}

D'après ce que j'avais compris sur ce lien http://msdn2.microsoft.com/en-us/library/aa366878.aspx
 , c'est le MapViewOfFile qui retourne le pointeur sur le buffer mais... la lecture ne ce fait pas.

Quelqu'un saurai-il ou ce trouve le problème ?

p.s : Je ne suis pas super fort en programmation...mais j'éssaye de m'y mettre ^^

mardi 16 octobre 2007 à 17:59:22 | Re : File Mapping entre 2 programmes

juju12

Réponse acceptée !
Si c'est juste pour échanger des données pas besoin de fichier tu fais direct :
CreateFileMapping(INVALID_HANDLE_VALUE,...);
pour écrire par ex.
char* pBuffer=(char*)MapViewOfFile(...);
pBuffer[0]='T';
quand tu as fini d'écrire :
UnmapViewOfFile(...);
CloseHandle(...);

et dans l'autre prog.
OpenFileMapping(..);
char* pBuffer=(char*)MapViewOfFile(...);
printf("%c\n",pBuffer[0]);
UnmapViewOfFile(...);
CloseHandle(...);

ceci devrait marcher.
mardi 16 octobre 2007 à 18:30:02 | Re : File Mapping entre 2 programmes

Arkadias

Bonjour,
Merci de la réponse, je vais tester ça demain à la première heure ^^
mercredi 17 octobre 2007 à 09:51:05 | Re : File Mapping entre 2 programmes

Arkadias

Ta solution fonctionne très bien juju12, merci encore pour le coup de main ^^


Cette discussion est classée dans : buffer, file, read, hfile, hmapping


Répondre à ce message

Sujets en rapport avec ce message

Avis des PROS! [ par UnExPeCtEdSpy ] Bonjour,je suis plus familier du vb que du c++ alors j'vous d'mande de l'aide :J'utilise une Dll en c+ avec un prog en Vb qui manipule des fichiers.Qu (win32)Fichier et buffer en lecture seule [ par mogwai93 ] Bonjour Je voudrais lire un fichier, placer le contenu de ce fichier dans un buffer et modifier ce buffer (mais pas le fichier). J'arrive bien à ou ecrire ds un fichier [ par 69lion69 ] Salut a tous alor voila dans une application en api windows je créér un fichier et je copie le contenu dun tableau de float le fichier mais il ma'affi Redirection sortie [ par M5i9k ] Bonjour à tous,je voudrais lire la sortie d'une console lancée à partir de mon programme (j'utilise CreateProcess), je voudrais savoir si je suis sur Manipuler des caracteres un par un avec la fonction read... [ par ROW_PyRo ] Bonjour, Je suis actuellement sur un projet, BSQ. [quote] Il s'agit de trouver le plus grand carré possible sur un plateau en évitant des obstacles. pb acces avec createfile et ReadDirectoryChangesW [ par kts_system ] bonjour,voila mon probleme : j'ai une classe qui permet de reperer les changement dans un dossier (ajout / modif /suppression)poutr cela je lance un t probleme avec wininet [ par cbarcli ] voila je veux compiler le code si dessous sous dev-c++ mais ça donne des erreur du genre:   [Linker error] undefined reference to `InternetOpenA@20' Readfile et access denied [ par sran_isback ] Bonjour ! J'aimerai récupérer le contenu d'un fichier texte et le coller dans un tableau de char afin de pouvoir l'utiliser dans une autre partie du Envoi de fichier non complet [ par trafounet ] bonjour à tous,je cherche à envoyer un fichier par socket et ca marche pour les fichiers de petite taille (quelques ko) mais malheuresement dès que le Binaire Hexa :-S Un petit soutient svp [ par MrDimanche ] Bonjour, voila ce qui m'amène.Je dois lire un fichier de données binaire, et le convertir. Mais si j'ai une petite expérience en c, c'est la première


Nos sponsors


Sondage...

Comparez les prix

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,577 sec (4)

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