Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Narwal Flow 2: la pulizia di casa con un mocio a nastro
Narwal Flow 2: la pulizia di casa con un mocio a nastro
Narwal Flow 2 implementa un mocio a nastro che esegue una pulizia dettagliata del pavimento di casa, in abbinamento ad un potente motore di aspirazione della polvere: un prodotto ideale per gestire in autonomia e con grande efficacia le necessità di pulizia dei pavimenti di casa
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
MSI FORGE GK600 TKL WIRELESS: switch lineari hot-swap, tripla connettività, display LCD e 5 strati di fonoassorbimento. Ottima in gaming, a 79,99 euro
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI porta un importante aggiornamento alla sua linea di gimbal camera tascabili con Osmo Pocket 4: sensore CMOS da 1 pollice rinnovato, gamma dinamica a 14 stop, profilo colore D-Log a 10 bit, slow motion a 4K/240fps e 107 GB di archiviazione integrata. Un prodotto pensato per i creator avanzati, ma che convince anche per l'uso quotidiano
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-04-2006, 20:54   #1
Oppid
Senior Member
 
Iscritto dal: Mar 2005
Città: Salerno
Messaggi: 477
domanda per esperti

Salve ragazzi, mi trovo di fronte ad un problema a cui non riesco a trovare una spiegazione!
Supponendo di avere un file scritto in c che contiente una:

char *str = "Ciao mondo";
printf("Salve mondo\n");
write(1,str,10);

il problema è il seguente:
Se eseguo normalmente a.out viene eseguita prima la printf e poi la write.
Ma se eseguo a.out > file ; cat file, viene eseguita prima la write e poi la printf!
Come mai accade questo!!!???
__________________
Felice di aver trascorso la mia adolescenza con winning eleven Toshiba A500-14F
Oppid è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2006, 21:07   #2
ArtX
Registered User
 
Iscritto dal: Feb 2005
Messaggi: 1856
forse è meglio se lo chiedi sulla sezione programmazione
ArtX è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2006, 09:21   #3
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Sposto in programmazione.

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2006, 11:14   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Oppid
char *str = "Ciao mondo";
printf("Salve mondo\n");
write(1,str,10);
Innanzitutto tieni presente che stai usando 2 funzioni di I/O ad un diverso livello. write è una delle funzioni native di Linux. printf è una delle funzioni della libreria standard del "C".
Le funzioni di I/O come la printf sono, notoriamente, bufferizzate. Le funzioni native come la write non credo che siano bufferizzate (dovrei comunque leggere bene la documentazione ).

Non so spiegarti esattamente e precisamente perché c'è questa differenza. Credo che il problema sia appunto una questione legata al buffering.

In generale, comunque, bisogna stare attenti ad utilizzare in modo "mixato" le funzioni native e le funzioni "di alto livello" della libreria standard del "C". Se vuoi risolvere la cosa, puoi fare così:
Codice:
char *str = "Ciao mondo";
printf("Salve mondo\n");
fflush (stdout);
write(1,str,10);
In questo modo (ho provato) hai sempre la stessa sequenza di output.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2006, 12:24   #5
Oppid
Senior Member
 
Iscritto dal: Mar 2005
Città: Salerno
Messaggi: 477
Quote:
Originariamente inviato da andbin
Innanzitutto tieni presente che stai usando 2 funzioni di I/O ad un diverso livello. write è una delle funzioni native di Linux. printf è una delle funzioni della libreria standard del "C".
Le funzioni di I/O come la printf sono, notoriamente, bufferizzate. Le funzioni native come la write non credo che siano bufferizzate (dovrei comunque leggere bene la documentazione ).

Non so spiegarti esattamente e precisamente perché c'è questa differenza. Credo che il problema sia appunto una questione legata al buffering.

In generale, comunque, bisogna stare attenti ad utilizzare in modo "mixato" le funzioni native e le funzioni "di alto livello" della libreria standard del "C". Se vuoi risolvere la cosa, puoi fare così:
Codice:
char *str = "Ciao mondo";
printf("Salve mondo\n");
fflush (stdout);
write(1,str,10);
In questo modo (ho provato) hai sempre la stessa sequenza di output.
andbin grazie per la risposta e per il codice esatto che risolve la cosa!
Cmq sono riuscito a capire il perchè....o almeno credo, quindi adesso lo scrivo casomai servisse ad altri!
La write come hai detto tu è una funzione nativa di linux ed è UNDBUFFERED, cioè appunto le istruzioni di I/O non bufferizzano i caratteri e vengono eseguite immediatamente, mentre la printf è una funzione della libreria standard di I/O ed è LINEBUFFERED ossia il buffer viene svuotato (e l'operazione di I/O viene eseguita) ogni qualvolta si incontra un carattere di newline o quando questo è pieno. Quindi viene prima "scritta" la write perchè essendo unbuffered i caratteri vengono scritti immediatamente, e poi la printf quando si incontra il carattere di newline....in sostanza è quello che avevi detti tu, più o meno. Grazie e ciao!
__________________
Felice di aver trascorso la mia adolescenza con winning eleven Toshiba A500-14F
Oppid è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2006, 18:39   #6
Bahamut Zero
Senior Member
 
L'Avatar di Bahamut Zero
 
Iscritto dal: Apr 2000
Città: Naples
Messaggi: 3907
Oppid domani andiamo insieme all'esame della Rescigno?
__________________
Cancellato stare lucido dal mio vocabolario -Speaker Cenzou-
Bahamut Zero è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2006, 18:46   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Bahamut Zero
Oppid domani andiamo insieme all'esame della Rescigno?
Della serie ... "come è piccolo il mondo".
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)

Ultima modifica di andbin : 25-04-2006 alle 19:08.
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2006, 23:37   #8
rdefalco
Senior Member
 
L'Avatar di rdefalco
 
Iscritto dal: Feb 2005
Città: Napoli (provincia)
Messaggi: 2372
Quote:
Originariamente inviato da andbin
Della serie ... "come è piccolo il mondo".
qui in sezione programmazione ne vengono spesso di colleghi miei di studio...

EDIT: oltretutto suggerirei, quando capita, di scriverlo che si tratta di un esercizio di esame. Anche a me è capitato di vedere richieste alquanto "bizzarre" che diventano "normali" viste in un ottica di esame. Almeno si capisce che è un problema da spiegare e NON da risolvere...
__________________
Raffo™ (io, non la birra) | informatica»unisa.it | my terzigno | για να είναι ή για να μην είναι
rdefalco è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2006, 09:25   #9
Oppid
Senior Member
 
Iscritto dal: Mar 2005
Città: Salerno
Messaggi: 477
Quote:
Originariamente inviato da Bahamut Zero
Oppid domani andiamo insieme all'esame della Rescigno?
ahuahuahuahuahuahuaahu.....con Abate cmq!
__________________
Felice di aver trascorso la mia adolescenza con winning eleven Toshiba A500-14F
Oppid è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2006, 15:53   #10
rdefalco
Senior Member
 
L'Avatar di rdefalco
 
Iscritto dal: Feb 2005
Città: Napoli (provincia)
Messaggi: 2372
tutto fatto!
__________________
Raffo™ (io, non la birra) | informatica»unisa.it | my terzigno | για να είναι ή για να μην είναι
rdefalco è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Narwal Flow 2: la pulizia di casa con un mocio a nastro Narwal Flow 2: la pulizia di casa con un mocio a...
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless Tastiera gaming MSI GK600 TKL: switch hot-swap, ...
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Tesla Cybertruck, numeri che fanno discu...
Intel Arc G3 Extreme: fino a 80W di pote...
SteelSeries Aerox 3 Wireless Gen 2 recen...
Tesla nel deserto senza batteria: il via...
Meta licenzia a partire da fine maggio: ...
TV TCL QLED da 65 pollici a 491€ su Amaz...
Windows 11, l'aggiornamento di aprile è ...
Niente iPhone 18 base nel 2026? Ecco la ...
Tinder introduce la scansione dell'iride...
Google sta per aggiungere luci colorate ...
PS6 potrebbe offrire prestazioni tre vol...
SK hynix ha avviato la produzione di mod...
Microsoft non ha pace sul Menu Start di ...
Cinque robot aspirapolvere e lavapavimen...
De'Longhi Tasciugo AriaDry: il deumidifi...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:21.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v