CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

problème OpenFileMapping

broski-ruserios
broski-ruserios
Niveau 8
25 mai 2012 à 19:56:50

Bonjour,
j'essaie de programmer une mémoire partagée entre deux shells(msys) sous windows, j'arrive à faire le code du client mais dans le code du serveur,il y a une erreur.

code client :
[CODE]#include <windows.h>

  1. include <stdio.h>
  2. include <conio.h>

int main()
{ HANDLE mem;
char* buf;
char* nomdufile="c:\\a.txt";
HANDLE file=CreateFile( nomdufile, FILE_MAP_ALL_ACCESS, 0, NULL, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, NULL );
if( file == INVALID_HANDLE_VALUE )
{
printf("erreur lors de la creation du file\n" );
return 1;
}
if ((mem = CreateFileMapping(file, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size (high-order DWORD)
1024, // maximum object size (low-order DWORD)
0))==NULL) {
printf("erreur impossible de cree un fichier mapper");
return 1;
}

/*
* On attache le segment dans la memoire.
*/
if ((buf = (char *) MapViewOfFile(mem, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
1024)) ==NULL ) {
printf("erreur lors de la procedure de mappage du fichier a mapper");
CloseHandle(mem);
CloseHandle(file);
return 0;
}
fgets(buf,1024,stdin);
UnmapViewOfFile(buf);
/*CloseHandle(file);*/
return 1;

}
[\CODE]
code serveur:
[CODE]#include <windows.h>

  1. include <stdio.h>
  2. include <conio.h>

int main()
{ char* nomdufile1="c:\\a.txt";
char* buf1;
HANDLE
file=OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,nom
dufile1);
if(file==NULL){
printf("windows pu\n");
return 1;
}
if((buf1=(char*) MapViewOfFile(file,FILE_MAP_ALL_ACCESS, 0,0,1024)) ==NULL ){/*l'erreur se trouve là*/
printf("Erreur lors du mappage du file \n");
return 1;
}
while(*buf1=='\0');
printf("%s",buf1);
/*UnmapViewOfFile(buf1);
CloseHandle(file1);*/
return 1;
}
[\CODE]

Merci d'avance pour la réponse.

godrik
godrik
Niveau 30
25 mai 2012 à 20:08:40

quelle est cette erreur dont tu parles?

broski-ruserios
broski-ruserios
Niveau 8
25 mai 2012 à 20:53:47

dans le serveur la primitive
file=OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,nom

dufile1); est égale à NULL, je sais pas pourquoi??

broski-ruserios
broski-ruserios
Niveau 8
26 mai 2012 à 00:03:05

après plusieurs recherche, j'ai remarquer que la primitive :
OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,nom dufile1);

ne trouve pas le fichier pourtant le fichier est bien créé.

kufa
kufa
Niveau 9
26 mai 2012 à 01:46:13

Les arguments de ton CreateFile sont bizarres =)
Jette un petit coup d'oeil sur la msdn:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366537(v=vs.85).aspx

Ensuite, pourquoi passer par un fichier alors que tout tourne sur la meme machine? Named object fait l'affaire! Je t'ai paste un bout d'un de mes utilitaires pour te donner une idee:
http://pastebin.com/0sjDmdDN

Ca requiert des privileges admin, tu veux probablement des bouts de code comme ca en plus:
SetNamedSecurityInfo(sMemoryName, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, 0, 0, (PACL) NULL, NULL);

/k

broski-ruserios
broski-ruserios
Niveau 8
26 mai 2012 à 09:41:38

ok, merci bien pour l'aide, mais comment on peut utiliser OpenFileMapping() pour lire ce qui est écrit dans une file de ce genre :
CreateFileMapping(INVALID_HANDLE_VALUE,NULL, PAGE_READWRITE,0,1024,0);

broski-ruserios
broski-ruserios
Niveau 8
26 mai 2012 à 10:37:26

merci beaucoup kufa, j'ai réussi à réaliser le code, je vais le donner pour ce qui en ont besoin regarder la paste suivante:

http://pastebin.com/tSUx03UT

sujet clos.

broski-ruserios
broski-ruserios
Niveau 8
02 juin 2012 à 11:18:46

oui mais je veux que le client et le serveur utilise le même file, mem tu vois ce que je veux dire, dans ma solution, j'utilisais un fichier file mais d'après le professeur, il faut que j'utilise le même variable mem au niveau du client :
buf=(char*) MapViewOfFile(file,FILE_MAP_ALL_ACCESS, 0,0,1024));
à la place de sa il veut quelquechose comme çà :
buf=(char*)
MapViewOfFile(mem,FILE_MAP_ALL_ACCESS,0,0,1024));

mais le mem est créé du coté serveur et je le veux du côté client aussi, c'est pour çà que je vous parlais d'une solution avec scanf.

broski-ruserios
broski-ruserios
Niveau 8
02 juin 2012 à 11:19:42

j'ai oublier un = entre buf et MapViewofFile.

broski-ruserios
broski-ruserios
Niveau 8
02 juin 2012 à 11:50:45

en faite j'ai rien oublié ^^

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment