[C] Passer l'adresse d'une structure

Résolu/Fermé
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
- 2 juin 2005 à 10:48
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
- 2 juin 2005 à 11:14
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
++

3 réponses

tafiscobar
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
177
2 juin 2005 à 11:01
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 ...
0
TuXor
Messages postés
97
Date d'inscription
lundi 23 mai 2005
Statut
Membre
Dernière intervention
28 avril 2006
25
2 juin 2005 à 11:04
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 @+
0
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
856
2 juin 2005 à 11:14
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... :)


++
0