[ C ] Comment faire pour transferer un exécutable (type linux : ELF)

Comment faire pour transferer un exécutable (type linux : ELF) [ C ] - C++ - Programmation

Marsh Posté le 12-04-2002 à 03:34:38    

Je cherche à tranférer un fichier sur un socket donné.
à l'entré du socket, on a un write qui écrit le fichier
à la sortie (un ordinateur distant), on a un read qui réceptionne le résultat.
 
le probleme, c'est que ça veut pas fonctionner avec les fichier ELF.
Par contre ça fonctionne tres bien avec les fichiers texte ASCII
 
j'ai besoin d'aide là... je vois pas ce qui va pas

Reply

Marsh Posté le 12-04-2002 à 03:34:38   

Reply

Marsh Posté le 12-04-2002 à 09:33:51    

Ne serait-ce pas par hasard parce que tu ouvres ton fichier en mode texte au lieu de binaire ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 12-04-2002 à 10:51:00    

antp a écrit a écrit :

Ne serait-ce pas par hasard parce que tu ouvres ton fichier en mode texte au lieu de binaire ?  




 
 :??:  :heink:  :crazy:  
pas compris là... en C on choisis pas le type de fichier à l'ouverture, ou il y a quelque chose qui m'échappe
voilà comment je l'ouvre :
 
open(file_name, O_WRONLY | O_CREAT | O_TRUNC, 0640);
ça c'est pour celui qui lit dans le socket ce qu'il écrit dans le fichier (celui qui déconne à priori).
 
et celui qui lit dans le fichier ce qu'il écrit dans le socket :
open(file_name, O_RDONLY);
 
merci de m'aider en tout cas  :hello:

Reply

Marsh Posté le 12-04-2002 à 11:07:16    

Rajoute O_BINARY dans tes deux open


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 12-04-2002 à 11:12:18    

antp a écrit a écrit :

Rajoute O_BINARY dans tes deux open


O_BINARY n'existe pas sous Unix.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 12-04-2002 à 11:28:10    

Ha, bhen j'aurai apris un truc alors :/
C'est vrai qu'y a que sous Windows qu'il y a c'est problèmes mode texte / mode binaire avec les retour de lignes qui prennent 2 octets...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 12-04-2002 à 11:34:14    

Pas que sous Windows, je crois qu'il y en a sous Mac aussi (peut-être plus avec MacOS X).


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 12-04-2002 à 11:44:16    

Je croyais que sous mac c'était un seul aussi, mais pas le même que Linux (l'autre en fait, l'un c'est 10 et l'autre c'est 13).


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 12-04-2002 à 11:44:40    

ben ok, mais ça resoud pas mon pb alors
moi je fais le test entre deux machine linux (et faut que ce soit compatible unix aussi)
 
alors, une idée ?

Reply

Marsh Posté le 12-04-2002 à 12:01:50    

rrraaaaaaahh !  :o  
 
 [:djoh]

Reply

Marsh Posté le 12-04-2002 à 12:01:50   

Reply

Marsh Posté le 12-04-2002 à 12:23:46    

... euuuuh ... up  :sweat:

Reply

Marsh Posté le 12-04-2002 à 13:06:29    

Quel est le symptome ?
le fichier transfere a-t-il la meme taille que le fichier d'origine ?
as-tu fait une comparaison des fichiers ?

Reply

Marsh Posté le 12-04-2002 à 13:31:12    

BENB a écrit a écrit :

Quel est le symptome ?
le fichier transfere a-t-il la meme taille que le fichier d'origine ?
as-tu fait une comparaison des fichiers ?  




 
pour un fichier texte (ASCII), il transfere nickel
pour un exécutable, ça passe pas du tout, il fait des truc bizarre (je saurais pas trop être plus précis) : on a l'impression qu'il bloc au read sur le socket
 
 
PS : ça bloc du cote du poste qui lit dans le socket, celui qui écrit ne réagit pas (comme si tout se passait bien)

 

[jfdsdjhfuetppo]--Message édité par djoh--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 14-04-2002 à 13:59:46    

[:djoh]  
alors, toujours pas d'idées

Reply

Marsh Posté le 14-04-2002 à 14:06:55    

tu le transfères comment ton fichier ? si tu le lis dans un buffer après l'avoir ouvert avec un fopen(..., "rb" ) (b pour binary), il ne devrait pas y avoir de problème.
 
sinon, teste autre chose : essaye d'envoyer un buffer de 256 bytes rempli des 256 caractères (char buf[256]; for (i=0; i<256; i++) buf[i] = i;), etc.

Reply

Marsh Posté le 14-04-2002 à 14:07:58    

si tu veux du code source pour t'inspirer, il y a http://www.sockaddr.com/ExampleSourceCode.html : chercher le client et le serveur HTTP.

Reply

Marsh Posté le 14-04-2002 à 14:20:48    

youdontcare a écrit a écrit :

tu le transfères comment ton fichier ? si tu le lis dans un buffer après l'avoir ouvert avec un fopen(..., "rb" ) (b pour binary), il ne devrait pas y avoir de problème.
 
sinon, teste autre chose : essaye d'envoyer un buffer de 256 bytes rempli des 256 caractères (char buf[256]; for (i=0; i<256; i++) buf[i] = i;), etc.  




 
je peux pas utiliser fopen parce que le stream est une socket (on peut p-t mais j'ai pas trouver au moment de tapper cette partie du code, donc je me demerde avec les read/write/open et descripteur de flux de type entier

Reply

Marsh Posté le 14-04-2002 à 14:21:08    

youdontcare a écrit a écrit :

si tu veux du code source pour t'inspirer, il y a http://www.sockaddr.com/ExampleSourceCode.html : chercher le client et le serveur HTTP.  




 
merci, je vais matter ça :jap:

Reply

Marsh Posté le 14-04-2002 à 14:24:36    

djoh a écrit a écrit :

je peux pas utiliser fopen parce que le stream est une socket


mais comment envoies-tu ton fichier ? faut bien que tu le lises dans un buffer avant de l'envoyer ...  
 
>> à l'entré du socket, on a un write qui écrit le fichier  
 
d'où vient le fichier ?

Reply

Marsh Posté le 14-04-2002 à 14:33:39    

youdontcare a écrit a écrit :

mais comment envoies-tu ton fichier ? faut bien que tu le lises dans un buffer avant de l'envoyer ...  
 
>> à l'entré du socket, on a un write qui écrit le fichier  
 
d'où vient le fichier ?  




 
pour envoyer un fichier du client vers le serveur :
 
client :
fd=open(...)
read(fd,buf,size)
write(socket,buf,size)
 
serveur :
fd=open(...)
read(socket,buf,size)
write(fd,buf,size)
 
je pense que le nom des variable est assez clair : comme ça , ça marche bien pour un fichier texte mais pas pour un ELF

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed