Rechercher : dans
Par :

[C] Passer l'adresse d'une structure

Dernière réponse le 7 mar 2008 à 16:44:40 kij_82, le 2 jun 2005 à 10:48:14 
 Signaler ce message aux modérateurs

Bonjours,

alors voilà, j'ai un client / serveur C.
Le client passe une requete SQL (sous format texte) au serveur apres connecion. Le serveur est chargé de lancer un module Perl qui effectue une connexion à une base de données et exécute la requete sur cette base, puis renvoie le résultat au prog C.
Le serveur doit alors, avant de déconnecter le client, lui donner le résultat de la requête.

Je me pose alors les question suivante :
Le résultat est un tableau de tableau de ... bref plein de ligne contenant des champs de tablea (résultat SQL quoi). Pour passer cela au client je me demandais si ce n'était plus simple de lui passer l'adresse de la structure qui a mémorisé le résultat (au niveau du Serveur C).
Donc, dans un premier temps, y a t-il qqun qui puisse me rapeller commment on passe l'adresse d'une structure.

D'autre part, uisqu'il s'agit d'un client / serveur, le client peut être un programme situé sur un autre pc... si je lui passe l'adresse de la structure située sur le pc du serveur, n'y aura 't'il pas de probleme ? Pour retrouver cette structure... ou y a-t-il un risque de réécriture de la part du serveur plus tard, et de ce fait, que le client ne retrouve plus la structure ?

Voilà, c'est peut être pas très clair... désolé.

merci
++ ~ iclic @ gauch,iclic,  iclic @ droate, iclic, iclic
             et ya pas de bôg môsieu !    ~

Meilleures réponses pour « [C] Passer l'adresse d'une structure » dans :
[MSN] Mot de passe perdu VoirVous avez perdu ou oublié votre mot de passe d'accès à un service MSN ou Hotmail ? Vous êtes dans l'un de ces trois cas : 1er cas : Vous avez oublié votre mot de passe mais connaissez la réponse à la question secrète et/ou vous avez une...
[Programmation] Conventions de passage de paramètres sous x86 VoirLes conventions de passage de paramètres sous x86 Introduction Cdecl Stdcall Fastcall Register Pascal Sources de ce document et liens Lorsqu'un programme est compilé pour une architecture x86, le passage de paramètres pour...
Les templates en C++ VoirIntroduction Avantages Inconvénients Quand utiliser des templates ? Que dois-je mettre dans les .hpp et dans les .cpp ? Convention de notations Quelques templates célèbres STL BGL Premiers pas Spécifications de templates Template par...
Les structures en langage C VoirDifférence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...
Les structures en langage C++ VoirDifférence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...

1

tafiscobar, le 2 jun 2005 à 11:01:21

Salut, il n'y a pas de différence entre l'adresse d'un entier ou l'adresse d'une structure, cela reste un pointeur qui contient une adresse. Donc si ta structure c'est par exemple sql:
sql marequete;
&marequete; // te donne l'adresse de marequete
sql *unerequete; // un pointeur sur ta requete.

Maintenant, sur comment passer les messages entre client/serveur cela dépend de l'api et de ce q'il propose et donc je ne peux rien te dire dessus, cela fait un bon moment que je nen ai pas utilisé. En C je sais que l'on ecrit sur un filedescriptor et l'autre lit dessus, je ne sais plus ... tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!

Répondre à tafiscobar

2

TuXor, le 2 jun 2005 à 11:04:11

Salut kij,

je pense quetu a bien raison de te poser des question sur la validité de l'adresse que tu veux passer a ton client.

car si j'ai bien compris c'est le serveur qui exécute la requète et qui renvoi le résultat au client (normal pour un serveur).

mais comme ce sont deux machines différantes, l'adresse que le serveur renverrait au client, correspondrait a un espace mémoire dont on ne peut rien savoir (a part son contenu brut) et qui ne risque pas de contenir les données escomptées.

Sinon ce que je te conseille, c'est de revoyer le résultat sous forme de buffer, et de le copier ensuite dans une structure identique a celle de départ.

pour récuérer l'adresse d'une variable en c, on utilise

& <variable>.

mais si il s'agit d'un tableau de caractères, il suffit de passer le nom du tableau, qui est lui même un pointeur.
on peut aussi se compliquer la vieinutilement en renvoyant

& tab[0]

en espérant que cela puisse t'être utile @+

Répondre à TuXor

3

 kij_82, le 2 jun 2005 à 11:14:13

Merci à tous le deux,

cela confirme ce que je pensais masi ej ne voulais pas me lancer dans un truc bien merdique (La structure est la suivante :

typedef struct temp {
	char ****tableau;
	int nb_retours;
	int *nbligne;
	int *nbchamp;
};
)

Bon bah, je me met au boulot. C'est sutout pour le ****tableau que ca va faire mal... mais bon : je l'ai déjà fait du Perl au C,alors du serveur au client... :)


++ ~ iclic @ gauch,iclic,  iclic @ droate, iclic, iclic
             et ya pas de bôg môsieu !    ~

Répondre à kij_82