Newsgroup: it.comp.programmare
Titolo: Da stream a string

Ciao!
Ho un problema che spero mi possate aiutare a risolvere.
Devo memorizzare in una stringa (char *) il contenuto di un intero file.
Quando il file contiene testo (txt, html, css, ecc.) non ho nessun problema, 
uso una getc e risolvo il problema.
Non riesco invece in nessun modo a ottenere lo stesso risultato quando il 
file è un'immagine o un altro file.
Come posso fare?
P.S.: E' necessario che il contenuto del file stia in una stringa perchè sto 
realizzando un server HTTP e sto implementando l'invio del file tramite 
socket e la send prende come parametro una stringa da inviare.
-- 
Elminster 

 socket e la send prende come parametro una stringa da inviare.
Ti sconsiglio di leggere il file intero in una stringa. Immagina
qualcuno che vuole distribuiere un Iso DVD con il tuo server -
proveresti ad allocare una stringa di ~5GB.
C'è modo di leggere il file in pezzetti ed inviarlo pezzo per pezzo,
probabilmente conviene far quello.
E imo non bisogna neanche far differenza tra file di testo e file binari
(se non per i header HTTP).
hth,
	Benjamin

 binari (se non per i header HTTP).
Gli header vengono mandati correttamente (lo vedo con Telnet), col 
Content-Type indicato correttamente.
Purtroppo invece non viene mandato il corpo, quando si tratta di immagini. 
Può dipendere che in realtà un file di tipo immagine non sia composto da 
caratteri ma da byte (se c'è qualche differenza)?
Può essere che una getc non riesca ad estrarre i caratteri che compongono un 
file di tipo jpeg?
Non riesco a spiegarmi perchè con testo funziona e con immagini no.
-- 
Elminster 

 file di tipo jpeg?
No. [getc] reads the next character from stream and returns it as an
unsigned char cast to an int, or EOF on end of file or error.
Puoi peró incontrare problemi se da questi caratteri crei una stringa,
perchè un jpeg potrebbe senz'altro contenere un byte con valore '\0',
che magari verrebbe poi interpretato come "fine della stringa".
Benjamin

 Non riesco a spiegarmi perchè con testo funziona e con immagini no.
Forse perche' il binario non e' ascii e quindi bisogna uu-encodarlo
prima di inviarlo.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 prima di inviarlo.
Ok. E in pratica come si fa?
O è sufficiente che usi fread invece di getc?
-- 
Elminster 

realizzando un server HTTP 
Il protocollo HTTP prevede anche la spedizione di dati binari, non è
strettamente necessario che i dati da mandare siano rappresentabili
con una stringa.

file di tipo jpeg?
No.  La getc() non fa differenza, perché non sa assolutamente quale
sia il significato dei caratteri letti.

prima di inviarlo.
No.  Il protocollo HTTP non lo prevede.

"Andrea Laforgia" <a.laf...@andrealaforgia.it.invalid> wrote in
message 
news:nam1t21j82jvmhe72...@4ax.com

Sicuro?
Nella mail gli attach vengono uu-encodati e di questo sono certo.
Nell'HTTP mi pare che bisogna fare comunque qualcosa col mime, perche'
se sniffo vedo che passano solo degli ascii.
Vado a leggere qualche documentazione.


 Vado a leggere qualche documentazione.
Credo che sia necessario tenere in ascii gli header, non il 
contenuto. 
Non so se la limitazione sugli header sia esplicita nelle RFC ma, 
soprattutto se si deve passare per proxy etc. (e non lo puoi 
escludere a priori) o parlare con server che non conosci credo sia 
buona norma rispettarla.
Il contenuto invece può sicuramente essere binario (anche qui vale 
sempre la pena di specificare un mime type corretto negli header).
-- 
Valter Minute
(the reply address of this message is invalid)
(l'indirizzo di reply di questo messaggio non è valido)

 se sniffo vedo che passano solo degli ascii.
Ripeto: il protocollo HTTP consente la spedizione e ricezione di dati
binari.
Ti prego di fidarti. La posta elettronica non c'entra nulla.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Ti prego di fidarti. La posta elettronica non c'entra nulla.
Effettivamente ho fatto confusione.
Avete ragione voi.
Ricordavo una mia procedura che recuperava un file xml da un web server,
il quale xml conteneva dei dati uu-encodati, ma perche' erano
uu-encodati all'origine, e non per motivi di trasmissione.
Quindi il nostro amico che ha posto la questione, puo' benissimo avere a
che fare con files binari da trasmettere/ricevere in http.
Deve avere l'accortezza di allocare un buffer capiente e scandirlo con
un puntatore generico unsigned, per la lunghezza dei dati, e non per il
solito *p++ != 0.
Ho come il sospetto che il problema sia tutto li'.
