Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Community > Forum De Bell Tolls
 
Programmazione c
Clicca QUI per vedere il messaggio nel forum
Spiderweb
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

lorenzo
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);

nous
Lorè,a volte mi fai paura :approved:

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

lorenzo
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.

Spiderweb
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?

lorenzo
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...)

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

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

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

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

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

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

lorenzo
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?

LazerPhEa
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?

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate