Secondo lo standard (C89 mi pare) esistono due tipi di file: testo e binari. Non è però richiesto che il sistema operativo distingua tra i due.
Un file di testo è caratterizzato dall'essere diviso in linee, separate da un qualche tipo di sequenza, che dipende dal sistema operativo: LF(0x0a) su Unix, CR(0x0d) sui vecchi MacOS, CRLF su DOS,Windows,OS/2.
E qui c'è il trucco:
su Unix, per esempio, non fa differenza aprire un file con o senza il "b" (vedi anche man 3 fopen): per ogni "a capo logico" nel file c'è un byte (LF) e quello ti becchi.
Su Win, per ogni a "capo" logico nel file ci sono due byte: CR e LF. se apri un file come "b" li vedi entrambi, se lo apri come testo la sequenza ti viene tradotta al volo in un solo LF.
In scrittura avviene il contrario: se sei in modalità testo il tuo LF viene scritto senza modifiche su Unix e invece trasformato in un CRLF su Win, se sei in modalità binaria nessuna modifica accade e ogni byte viene scritto raw.
vedi anche
http://en.wikipedia.org/wiki/Newline
ciao!
british