Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: read vs fread

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    230

    read vs fread

    Ciao

    qualcuno mi potrebbe spiegare la differenza che esiste fra una read e una fread oppure in maniera equivalente fwrite e write ?
    Se devo leggere un file che è stato riempito attraverso dei bit generati in maniera casuale quale mi conviene usare ?
    Ciao e grazie

  2. #2
    read e write sono chiamate di sistema, normalmente non dovresti usarle.

    ciao

    sergio

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    230
    perchè non dpvrei usarle ?

  4. #4
    Perché non sono portabili, senza contare che se non sbaglio la write non è bufferizzata, e quindi è più lenta.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Originariamente inviato da puntino
    perchè non dpvrei usarle ?
    se vuoi le puoi usare nessuno te lo vieta, sono funzioni di basso livello: come ti ha detto Mitaly non sono bufferizzate, inoltre la struttura FILE ritornata dalla fopen ingloba molte informazioni utili del file che altrimenti ti devi ricavare da te, mentre la open ritorna il descrittore di file che non è che un intero.
    ciao
    sergio

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    230
    grazie ad entrambi

  7. #7
    aggiungo solo che la fread e fwrite sono costruite sulla read e write.
    ciao
    sergio

  8. #8
    Originariamente inviato da MItaly
    Perché non sono portabili, senza contare che se non sbaglio la write non è bufferizzata, e quindi è più lenta.
    Come può essere più lenta se fwrite richiama write ?

  9. #9
    dipende, se si legge o si scrive un carattere solo hai ragione altrimenti la fread e fwrite è più veloce perchè utilizza blocchi di memoria di dimensioni adatti al sistema su cui opera per minimizzare il numero di chiamate di sistema che sono le più costose.
    Per esempio guarda questa implementazione di getchar
    codice:
    int getchar () {
    
      static char buffer[BUFSIZ];
      static char * ptr_buf = buffer;
      static n_char = 0;
    
      // verifica se il buffer è vuoto
      if ( !n_char ) {
        // legge dallo stdin <0>
        n_char = read (0, buffer, sizeof ( buffer ) );
        // riposiziona il puntatore all'inizio del buffer
        ptr_buf = buffer;
      }
      return (--n_char >= 0) ? (unsigned char) *ptr_buf++ : EOF;
     
    }
    viene eseguita una unica chiamata di sistema per tutta la dimensione di buffer (BUFSIZE è definito in syscalls.h) e poi si svuota via via il buffer.
    ciao
    sergio

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    230
    Grazie per l'esempio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.