PDA

Visualizza la versione completa : [C/Socket] 206 Partial Connection...


nightfall
30-06-2004, 20:15
Come faccio a connettermi ad una certa posizione di un file...
Es. Devo Connettermi al byte 52 del file pippo.gz

Lethalman
01-07-2004, 07:41
Usa fseek nella libreria stdio.h

fseek(fd, 51, SEEK_SET);

In questo modo, il file fd verra' settato con un offset di 51 bytes a partire dal suo inizio (SEEK_SET), quindi facendo ad es' un fgets, lui partira' direttamente dal 52░ byte.

Oltre a SEEK_SET che indica l'inizio del file ci sono:
SEEK_CUR che imposta la posizione corrente del file
SEEK_END che imposta la fine del file

:)

nightfall
01-07-2004, 18:40
Quello lo posso fare su un file gia' presente sul mio hd...
Ma io mi connetto ad un file su un server remoto...

con recv(sock, buf, DIM_BUF, 0)
vado a 'scaricare' i byte del file...
(Dal Primo)
fseek() mi serve a poco in questo caso...
O almeno credo...

Lethalman
01-07-2004, 18:49
Dovevi dirlo meglio.... in questo caso usa lseek, funziona in modo uguale solo che al posto di un FILE devi mettere un int, ed in questo caso la socket

nightfall
01-07-2004, 19:04
Quindi basta modificare il valore di sock...

quindi prima di usare recv() sposto sock di numByte...

Grazie.

nightfall
08-07-2004, 18:47
Io Ho provato con lseek() ma mi da' ESPIPE
ESPIPE fildes is associated with a pipe, socket, or FIFO.


lseek(*sock, pos, 1);
switch(errno) {
case EBADF: fprintf (stderr, "EBADF fildes is not an open file descriptor.");
break;
case ESPIPE: fprintf (stderr, "ESPIPE fildes is associated with a pipe, socket, or FIFO.");
break;
case EINVAL: fprintf (stderr, "EINVAL whence is not one of SEEK_SET, SEEK_CUR,");
fprintf (stderr, "SEEK_END, or the resulting file offset would be negative.");
break;
case EOVERFLOW: fprintf (stderr, "EOVERFLOW The resulting file offset cannot be represented ");
fprintf (stderr, "in an off_t");
break;
}

nightfall
12-07-2004, 16:54
Nessuno ???
E' importante.... :dh˛:

Loading