Newsgroup: it.comp.lang.c
Titolo: Character output e direct access: domanda puramente teorica e cretina

Saluti a tutti.
Leggiucchiando "Teach yourself C in 21 days" della Sams mi sono
imbattuto nel capitolo "Writing and reading file data" pag 439. In
sostanza dice che esistono 3 modi per accedere per esempio in scrittura
ad un file, di cui riporto uno stralcio:
1) Formatted output: quando si vuole che il file venga in seguito letto
da qualche programma particolare tipo database
2) character output: per salvare singole linee o caratteri in un file di
tipo testo. Il file puo' in seguito essere letto da qualche altro
programma scritto in C o da un word processor.
3) Direct access: scrive su file binario. Usato quando si vuole che il
file venga letto dallo stesso programma o da un altro in C.  
Ora, escludendo il caso 1 (n.b. mi rendo conto che la domanda e'
cretina) c'e' qualche vaga relazione tra la modalita' di scrittura (o
lettura) di un file descritti dalla 2) e dalla 3) ed i cosidetti devices
a caratteri o a blocchi utilizzati in unix? 
A me pare di no, ma qualcosa mi dice che invece una relazione c'e'.
Grazie mille per l'attenzione,
b.
b.

 A me pare di no, ma qualcosa mi dice che invece una relazione c'e'.
Forse non ho capito la domanda, e spero di non aver scantonato
completamente con la risposta ...
Premesso che sotto Unix non c'e' nessuna differenza tra un file di
testo e un file binario, un device e' il pezzo dei codice (del kernel)
che ti permette di interagire con l'hardware a disposizione, i "punti
di attacco" tra un device e il file system (in unix tutto e' un file
:-)) sono i file che si trovano nella directoty /dev.
La differenza tra un device a blocchi e uno a caratteri e' che con
un device a blocchi l'unita' minima di scrittura/lettura e' il blocco,
in uno a caratteri l'unita' minima di lettura/scrittura e' (manco a
dirlo) il carattere.
Un es. di device a blocchi e' quello per l'accesso ai dischi (/dev/hda,
/dev/sda, ecc), un esempio di device a caratteri e' quello per l'accesso
alla stampante o allo schermo (/dev/lp0, /dev/tty1).
In un disco non puoi leggere/scrivere meno di 512 byte, perche'
la meccanica del disco e' fatta in modo da leggere un settore per
volta: se a te interessa un unico byte, leggi tutto il settore e scarti
511 byte. Normalmente i device a blocchi hanno dei meccanismi di buffer
che consentono scritture piu' rapide, quelli a carattere no (ma su
questa
affermazione non ci metterei la mano sul fuoco :-)) e che la dimensione
del blocco di un device a blocchi non e' detto che sia pari a quella
del blocco del dispositivo fisico che controlla: il dos aveva come
unita'
di allocazione minima il cluster (di dimensione variabile con la
dimensione
del disco) i dischi (da che li uso :-)) hanno sempre il settore di 512
byte.
Ovviamente per il dos non si puo' parlare di device, ma questo e'
l'unico
esempio che mi e' venuto in mente.
Quindi la relazione che c'e' tra un device e le modalita' 2) & 3) e' che
un device a blocchi ti permette di interagire con un dispositivo fisico
tipo il disco, uno a carattere ti permette di interagire con un
dispositivo
fisico tipo lo schermo che l'interazione sia di tipo "testo" o di tipo
"binario" la cosa e' assolutamente ininfluente.
C:\>iao Angelo

 "binario" la cosa e' assolutamente ininfluente.
Il problema di fondo e' che non mi e' per niente chiaro ancora come si
scrivano questi "device", questi pezzi di codice che permettono di
interagire con l'hardware, ma credo questo sia argomento lungo e
complesso, e mi par ci siano dei bei tomi della O'really che lo
spiegano.
Grazie mille per la delucidazione,
b.

 a caratteri o a blocchi utilizzati in unix? 
Prima di tutto sotto linux non esiste differenza tra le modalita` 2 e 3.
Se, ad esempio,  apri un file con l'opzione  "w", puoi indifferentemente
scriverci  dati binari[1]  o testo. I  devices a  blocchi/caratteri sono
semplicemente dei file speciali, caratterizzati  da una coppia di numeri
(major and  minor numbers) che  li identificano in maniera  univoca.  La
lettura/scrittura  e`  controllata  direttamente  dal kernel  (o  da  un
modulo). Nella documentazione del kernel trovi qualche chiarimento.
[1] non e` pero`  una buona idea scrivere dati binari su  un file se non
si vuole compromettere  la portabilita` del programma. Ci  sono stati un
paio di thread di recente su questo argomento, cerca.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
"L'abilita` politica e` l'abilita` di prevedere quello che
 accadra` domani, la prossima settimana, il prossimo mese e
 l'anno prossimo. E di essere cosi` abili, piu` tardi,
 da spiegare  perche' non e` accaduto."