Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    WRITE e PRITNF: differenze? AIUTO!!

    salve sono nuovo e ho un primo quesito a cui non so rispondere. Ho questo programma:

    main(){
    char arry[ ]="Operativi!!";
    printf("Laboratorio di Sistemi ");
    write(1,arry,11);
    }

    compilando e mandando in esecuzione ottengo a schermo:

    OPERATIVI!! LABORATORIO DI SISTEMI...

    PERCHE? non riesco assolutamente a capire. E' una domanda per voi banale... spero mi aiutiate.Anche perchè il seguente programma invece:

    main(){
    char arry[ ]="Laboratorio di Sistemi ";
    write(1,arry,23);
    printf("Operativi!!");
    }

    mi dà in output: LABORATORIO DI SISTEMI OPERATIVI....

    attendo vostre spiegazioni... c'entra il fatto che write è una system call? aiutooooo

  2. #2
    Il problema è che nella printf non c'è lo "\n" quindi write ha la prevalenza, quindi stampa prima la write e poi quello che c'è nello standar output, ovvero "LABORATORIO DI SISTEMI".

    la stessa cosa accade quando dopo una printf non metti lo "\n" e la scanf non la esegue!!!

  3. #3

    Re: WRITE e PRITNF: differenze? AIUTO!!

    Originariamente inviato da Whatamess
    salve sono nuovo e ho un primo quesito a cui non so rispondere. Ho questo programma:

    main(){
    char arry[ ]="Operativi!!";
    printf("Laboratorio di Sistemi ");
    write(1,arry,11);
    }

    compilando e mandando in esecuzione ottengo a schermo:

    OPERATIVI!! LABORATORIO DI SISTEMI...

    PERCHE? non riesco assolutamente a capire. E' una domanda per voi banale... spero mi aiutiate.Anche perchè il seguente programma invece:

    main(){
    char arry[ ]="Laboratorio di Sistemi ";
    write(1,arry,23);
    printf("Operativi!!");
    }

    mi dà in output: LABORATORIO DI SISTEMI OPERATIVI....

    attendo vostre spiegazioni... c'entra il fatto che write è una system call? aiutooooo :( :bhò: :cry: :dhò: :dhò: :dhò: :dhò: :dhò:

    Il problema è che nella printf non c'è lo "\n" quindi write ha la prevalenza, quindi stampa prima la write e poi quello che c'è nello standar output, ovvero "LABORATORIO DI SISTEMI".

    la stessa cosa accade quando dopo una printf non metti lo "\n" e la scanf non la esegue!!!

  4. #4
    Il problema è che nella printf non c'è lo "\n" quindi write ha la prevalenza, quindi stampa prima la write e poi quello che c'è nello standar output, ovvero "LABORATORIO DI SISTEMI".

    la stessa cosa accade quando dopo una printf non metti lo "\n" e la scanf non la esegue!!!

  5. #5
    Grazie. Quindi se ho capito bene senza lo "\n" la printf salta all'istruzione successiva... giusto? Se dopo il write inserisco una nuova printf la esegue per ultima....

  6. #6
    Originariamente inviato da Whatamess
    Grazie. Quindi se ho capito bene senza lo "\n" la printf salta all'istruzione successiva... giusto? Se dopo il write inserisco una nuova printf la esegue per ultima....
    Falso. Non avviene alcun salto: la printf è "bufferizzata", la write no.
    Quindi l'output della printf avviene quando il "buffer" ha voglia d'essere svuotato. In pratica 'sta voglia avviene (ma non penso sia una specifica e forse la cosa è impostabile) quando incontra un "\n".
    Certamente il buffer viene svuotato (quindi visualizzato), alla fine del programma o quando si chiama la fflush.

    In generale è meglio usare le funzioni "bufferizzate", perché migliori nelle prestazioni (ad esempio è meglio scrivere in un colpo solo 1024 caratteri, piuttosto che in 1024 colpi un solo carattere).

    Quelle non "bufferizzate" servono essenzialmente per costruire le funzioni "bufferizzate" e in quei casi in cui è essenziale svuotare il buffer (ad esempio in comunicazione con un robot) ad ogni byte inviato.

  7. #7
    Esatto! è meglio usare solo quelle con buffer a meno che non stai scrivendo a basso livello, infatti la printf è stata implementata attraverso una write se non erro...

    Cmq scusate ma non ho capito perche il mess di prima mi è stato ripetuto più volte :master:

  8. #8
    Cmq scusate ma non ho capito perche il mess di prima mi è stato ripetuto più volte :master:
    problemi di unbuffering..
    ;-)

  9. #9
    Grazie a tutti per la rapida risposta... \o/ W i forum

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.