.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Forum De Bell Tolls (http://www.dsy.it/forum/forumdisplay.php?forumid=7)
-- Programmazione c (http://www.dsy.it/forum/showthread.php?threadid=3605)


Posted by Spiderweb on 09-04-2003 08:01:

Programmazione c

Ciao ragazzi, ho un problema in c..
Siccome sto programmando un client ftp e volevo implementare il resume, mi servirebbe una funzione che legge la dimensione del file che ho appena scritto... qualcuno sa come fare?
Grazie


Posted by lorenzo on 09-04-2003 12:19:

code:
#include <stdio.h> #include <fcntl.h> #include <io.h> ... int handle; long filesize; handle = open("FILENAME.DAT", O_RDWR); ... filesize = filelength(handle); ... close(handle);

__________________
Non ti laureare, continua a cazzeggiare!

"È tutta merda..." - clod81


Posted by nous on 09-04-2003 12:34:

Lorè,a volte mi fai paura :approved:

P.s. Ma perchè apri il file in lettura e scrittura?

__________________
Cristian,il Nous che invoglia ^_^

"La capa è troppo in la,e la sbarba è troppo giovane..mi sa che qua si va in bianco"
Ryo Saeba (City Hunter)


Posted by lorenzo on 09-04-2003 12:37:

Originally posted by nous
P.s. Ma perchè apri il file in lettura e scrittura?


Lui parla di "file che ho appena scritto", quindi immagino che ce l'abbia già aperto da prima.

__________________
Non ti laureare, continua a cazzeggiare!

"È tutta merda..." - clod81


Posted by Spiderweb on 09-04-2003 18:30:

Inserendo
int handle;
long posizione;

handle = open(retr, O_RDWR);
posizione=filelength(handle);
con gli opportuni header, dove str è una stringa contenente nome file, ottengo il seguente errore:
/home/spiderweb/tmp/ccaCZggr.o(.text+0x422): In function `resume':
: undefined reference to `filelength'
collect2: ld returned 1 exit status

come mai?


Posted by lorenzo on 11-04-2003 18:44:

Uhm... compila ma non linka...

Vabbè, ci sono altri metodi per calcolare la dimensione del file, ma devi aprirlo come stream.


O lo apri direttamente con la fopen():

code:
FILE *stream; stream = fopen("FILENAME.DAT", "w+");


O se ce l'hai aperto da prima con la open() lo converti in stream così:
code:
FILE *stream; stream = fdopen(handle, "w+");


e poi usa questa funzione per calcolarti la dimensione:
code:
long file_length(FILE *stream) { long p, size; p = ftell(stream); fseek(stream, 0L, SEEK_END); size = ftell(stream); fseek(stream, p, SEEK_SET); return size; }



(Spero di aver scritto tutto giusto, non l'ho provato...)

__________________
Non ti laureare, continua a cazzeggiare!

"È tutta merda..." - clod81


Posted by Lunik on 11-04-2003 18:45:

Off-Topic:
a volte Lore mi lascia :shock:

__________________
Il DSY su Facebook!!!


Posted by nous on 12-04-2003 00:08:

Anche a me...a che serve la ftell() ??

__________________
Cristian,il Nous che invoglia ^_^

"La capa è troppo in la,e la sbarba è troppo giovane..mi sa che qua si va in bianco"
Ryo Saeba (City Hunter)


Posted by Spiderweb on 12-04-2003 09:15:

Grazie mille a tutti... però adesso ho un altro problema: quando faccio la richiesta di download al server, lui riempie tutto il buffer della socket. Però il buffer della socket è limitato, nel senso che non posso mica allocare un array di 600mega: sapete come posso far dividere il file o allocare la dimensione del mio buffer dinamicamente?
Grazie


Posted by nous on 12-04-2003 10:31:

Off-Topic:
Ma perchè non usi smartFTP? :D:D:D

__________________
Cristian,il Nous che invoglia ^_^

"La capa è troppo in la,e la sbarba è troppo giovane..mi sa che qua si va in bianco"
Ryo Saeba (City Hunter)


Posted by CLod on 12-04-2003 12:54:

forse xkè deve fare un progetto per l'uni...

__________________
Se il pugno e' chiuso la mano e' vuota. Solo se la mano e' aperta puoi possedere tutto


Posted by nous on 12-04-2003 13:21:

Prova ad allocare memoria dinamicamente con la malloc passandole come parametro il sizeof del file che ti interessa.

__________________
Cristian,il Nous che invoglia ^_^

"La capa è troppo in la,e la sbarba è troppo giovane..mi sa che qua si va in bianco"
Ryo Saeba (City Hunter)


Posted by lorenzo on 14-04-2003 12:50:

Originally posted by Spiderweb
Però il buffer della socket è limitato, nel senso che non posso mica allocare un array di 600mega

code:
if ((var = (char *)malloc(629145600)) == NULL) fprintf(stderr, "Not enough memory.\n"); // :roll: :D

Beh, con una partizione di swap sufficientemente grande potresti anche farlo...



Non riesci a fare un buffer più piccolo che una volta pieno lo svuoti sul disco?

__________________
Non ti laureare, continua a cazzeggiare!

"È tutta merda..." - clod81


Posted by LazerPhEa on 14-04-2003 13:11:

Originally posted by Spiderweb
Grazie mille a tutti... però adesso ho un altro problema: quando faccio la richiesta di download al server, lui riempie tutto il buffer della socket. Però il buffer della socket è limitato, nel senso che non posso mica allocare un array di 600mega: sapete come posso far dividere il file o allocare la dimensione del mio buffer dinamicamente?
Grazie

Una curiosità: hai cercato nell'RFC cosa dice riguardo alla politica di flow control lato sender?

__________________
Questo è il giardino
Dove il principe muore
Nessun sentiero
Nessun destriero
Soltanto un nome... Eterno...


All times are GMT. The time now is 01:04.
Show all 14 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.