Newsgroup: it.comp.os.linux.development
Titolo: write e read: ancora problemi

Salve NG,
Perche' l'istruzione read qui sotto non legge 2000000 byte ma si ferma 
prima, precisamente quando incontra un errore o la fine del floppy disk? Il 
fatto e' che la errno non mi segnala nulla, ossia pippo mi restituisce il 
numero di byte letti invece di -1. Io invece mi aspettavo che alla fine del 
floppy mi restituisse un errore :(((
L'istruzione read e write non dovevano essere di basso livello ?
Qualche idea ?
Grazie, Nicola.
/////////////////////////////////////////////////////////////////////
if( ( fdFloppy = open("/dev/fd0", O_RDONLY) ) == -1 ) {
  printf("Cannot open floppy disk drive\n");
  return 0;
 }
 lseek(fdFloppy, 0, SEEK_SET);
 printf("Lettura in corso ...\n");
 pippo = read(fdFloppy, szBuffer, 2000000);
     if (pippo == -1)  {
       fprintf(stderr, "Errore write: %s\n", strerror(errno));
     }
 printf ("%d", pippo);
 /* close floppy disk */
 if( close(fdFloppy) == -1)
  printf("Cannot close drive\n");
//////////////////////////////////////////////////////////////////
-- 
______________________________
chi va pian va san e va lontan

 aspettavo che alla fine del floppy mi restituisse un errore :(((
Dalla  manpage di read(2):
    It is not an error if this number is smaller than the number of bytes
    requested;  this may happen for example because fewer bytes are
    actually available right now (maybe because we were close to
    end-of-file, or because we are reading from a pipe, or from a
    terminal), or because read() was interrupted by a signal.

Max M. wrote:

Grazie, deduco che ti riferisci al fatto che sono arrivato alla fine del 
file? Non e' mica tanto una istruzione di basso livello; e chi gli ha detto 
che e' arrivata alla fine del floppy ?
Mah, mi tocca imparare ad usare l'assmbler inline ? E' spiegato da qualche 
parte? Non ho trovato pagine man :((
Grazie, Nicola.


 parte? Non ho trovato pagine man :((
Per farci che? 
Comunque prova con info gas.
Per risolvere il tuo problema basta ripetere la lettura, se ti restituisce 
0 sei alla fine del file, se c'e` un errore -1 e setta errno.
Ciao
Simone

 Grazie, Nicola.
prego
-- 
real name: Fabrizio Chiarello	| a Debian GNU/Linux | i'm in the could
nick:	   ckk8			| "Woody" is running | do better category
e-mail:	   
fchia...@inwind.it
	| on Linux v2.4	     | 		  - ckk8

Simone Piccardi wrote:

Ho provato a scopiazzare uno di quei floppy protetti e ho scoperto che sono 
un sistema piu' efficace di proteggere il software. Infatti un credo che un 
cdrom si copi sempre mentre i floppy sono molto piu' difficili da 
duplicare. 
La read non mi restituisce -1, semplicemente mi restituisce ll numero di 
byte letti quando incontra la protezione, ossia un settore danneggiato. 
Come questo accada lo ignoro. Pensavo che nel primo settore del un floppy, 
quello con i dati di formattazione, vi fossero dei riferimenti errati 
(numero di settori inferiori al reale), invece questo non esatto.  Peraltro 
ho sentito che con i floppy da 5.25 si danneggiava fisicamente il floppy, 
ma non con quelli da 3.25.  Inoltre su un  vecchio post un tale sosteneva 
che  fosse questione di controller E-IDE mentre con i vecchi IDE il 
problema non ci sia: e' falso il trucco non e' questo :)))
Sembra che nessuno ci sia riuscito (a parte i pirati di professione 
s'intende). E dire che credevo che fosse un trucco per winzzoz :)
Ciao, Nicola.


 floppy nel tree del kernel.
Ah, ecco lo sospettavo :P
