|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2004
Città: BhO
Messaggi: 3701
|
[C]info su orologio e clrscr
ciao ragazzi! ieri mentre ero a lavoro mi sono venute un paio di curiosità che vorrei postare:
come faccio durante il mio programma a cancellare tutto il contenuto dello schermo?..se non ricordo male in unix si usava qualcosa del tipo clrscr... e poi come faccio a fare in modo che sia visualizzata ora e data all'interno del programma?...ho provato a leggere il mio manuale ma mi sembra una cosa un pò complicata sbaglio? grazie per le risposte
__________________
il cucchiaio non esiste...MondoIT: recensioni, appunti di vita da nerd, virtualizzazione e altre diavolerie informatiche Linux User 414915 linux counter Ho concluso con yorick, gor, djgusmy85, sulphur, Rospaccio, Leland Gaunt, paciuli
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Ti posto un sorgente di esempio. È un piccolo programma che usa la libreria curses (per la gestione del terminale) che cancella lo schermo, stampa la data/ora corrente ed aspetta un tasto prima di uscire. Codice:
#include <stdio.h>
#include <time.h>
#include <curses.h>
int main (int argc, char *argv[])
{
time_t t;
struct tm *tm;
initscr (); /* Curses: inizializzazione */
erase (); /* Curses: cancella schermo */
refresh (); /* Curses: refresh */
noecho (); /* Curses: toglie eco */
/* Lettura data/ora */
t = time (NULL);
tm = localtime (&t);
move (11, 23); /* Curses: muove cursore */
/* Stampa data/ora con la funzione printw di Curses */
printw ("Data/Ora: %02d/%02d/%04d %02d:%02d:%02d\n",
tm->tm_mday, tm->tm_mon+1, tm->tm_year+1900,
tm->tm_hour, tm->tm_min, tm->tm_sec);
move (13, 31);
printw ("Premi un tasto");
refresh (); /* Curses: refresh */
getch (); /* Curses: aspetta un tasto */
endwin (); /* Curses: terminazione */
return 0;
}
gcc -lcurses -o prova prova.c Se c'è qualcosa che non è chiaro, chiedi pure.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2004
Città: BhO
Messaggi: 3701
|
anticipatamente ti ringrazio sei stato gentilissimo...
/* Lettura data/ora */ t = time (NULL); tm = localtime (&t); questo comando non mi è ben chiaro...t non era di tipo time_t?ora che cosa comporta l'assegnazione a time(NULL)...e come mai proprio null? ...invece per la cancellazione dello schermo basta erase(); ...quale libreria lo include?
__________________
il cucchiaio non esiste...MondoIT: recensioni, appunti di vita da nerd, virtualizzazione e altre diavolerie informatiche Linux User 414915 linux counter Ho concluso con yorick, gor, djgusmy85, sulphur, Rospaccio, Leland Gaunt, paciuli
|
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
time_t time (time_t *t); Ti restituisce il numero di secondi trascorsi dalle 00:00:00 del 1 Gennaio 1970 (UTC). Ha come argomento un puntatore a time_t, cioè se t non è NULL, memorizza il valore anche nella variabile puntata da t. In pratica sono equivalenti: t = time (NULL); e time (&t); Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Feb 2004
Città: BhO
Messaggi: 3701
|
...sinceramente faccio ancora fatica per quanto riguarda ora e data...
ma mi pare di aver capito che con un #include <curses.h> e un successivo erase(); mi basta per cancellare lo schermo! se confermi questo almeno un primo traguardo l'abbiamo raggiunto! scusami se faccio domande stupide ma non sono a casa e non posso testare direttamente su macchina! ...per quanto riguarda time().. a cosa serve l'inizializzazione di curses??e refresh e noecho? initscr (); /* Curses: inizializzazione */ refresh (); /* Curses: refresh */ noecho (); /* Curses: toglie eco */
__________________
il cucchiaio non esiste...MondoIT: recensioni, appunti di vita da nerd, virtualizzazione e altre diavolerie informatiche Linux User 414915 linux counter Ho concluso con yorick, gor, djgusmy85, sulphur, Rospaccio, Leland Gaunt, paciuli
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Questa libreria va però gestita ed utilizzata in un modo ben preciso. La funzione initscr() deve sempre essere la prima funzione di ncurses ad essere chiamata. Essa determina il tipo di terminale, inizializza le sue strutture di dati interne, ecc... Al contrario, endwin() deve essere l'ultima, poiché libera tutto il necessario e termina l'utilizzo della libreria ncurses. Le altre funzioni servono per fare altre cose. Quando tu cancelli lo schermo (con erase) o scrivi qualcosa (con printw), non viene eseguita la cosa subito ma bisogna chiamare refresh(). Questo perchè la gestione del terminale è "bufferizzata". Quindi fai tutte le operazioni che vuoi (scrivi, cancella, ecc...) e poi con refresh() le "butti" realmente sul terminale. noecho() è molto semplice: quando aspetti un carattere con getch(), una volta premuto un carattere, lui, per default, lo stampa (cioè fa l'eco!). Chiamando noecho() disabiliti questa funzionalità. Ecco perché, in sostanza, non basta fare solo una erase!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Feb 2004
Città: BhO
Messaggi: 3701
|
quante ne sai!!
#include <curses.h> initscr (); erase (); refresh (); ...parti di codice... endwin(); questo dovrebbe bastare per cancellare lo schermo giusto???
__________________
il cucchiaio non esiste...MondoIT: recensioni, appunti di vita da nerd, virtualizzazione e altre diavolerie informatiche Linux User 414915 linux counter Ho concluso con yorick, gor, djgusmy85, sulphur, Rospaccio, Leland Gaunt, paciuli
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Feb 2004
Città: BhO
Messaggi: 3701
|
per quanto riguarda time.h...
/* Lettura data/ora */ t = time (NULL); tm = localtime (&t); /* Stampa data/ora con la funzione printw di Curses */ printw ("Data/Ora: %02d/%02d/%04d %02d:%02d:%02d\n", tm->tm_mday, tm->tm_mon+1, tm->tm_year+1900, tm->tm_hour, tm->tm_min, tm->tm_sec); lettura data ora: t = time (NULL); fa in modo che in t vengano memorizzati i secondi trascorsi dal 1-1-70... tm=localtime (&t); cosa fa?
__________________
il cucchiaio non esiste...MondoIT: recensioni, appunti di vita da nerd, virtualizzazione e altre diavolerie informatiche Linux User 414915 linux counter Ho concluso con yorick, gor, djgusmy85, sulphur, Rospaccio, Leland Gaunt, paciuli
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
localtime(), prende questo valore e calcola tutte le singole informazioni come giorno, mese, anno, ecc... che poi inserisce in una struttura di tipo struct tm di cui ti restituisce un puntatore. La data/ora è locale, quindi tiene conto del fuso orario impostato nel sistema.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Feb 2004
Città: BhO
Messaggi: 3701
|
perfetto!
e nel caso io volessi stampare data/ora con una printf? con una putchar?
__________________
il cucchiaio non esiste...MondoIT: recensioni, appunti di vita da nerd, virtualizzazione e altre diavolerie informatiche Linux User 414915 linux counter Ho concluso con yorick, gor, djgusmy85, sulphur, Rospaccio, Leland Gaunt, paciuli
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Feb 2004
Città: BhO
Messaggi: 3701
|
grazie mille sei stato chiearo e gentilissimo!
tutti speriamo di incontrare utenti come te nel momento del bisogno
__________________
il cucchiaio non esiste...MondoIT: recensioni, appunti di vita da nerd, virtualizzazione e altre diavolerie informatiche Linux User 414915 linux counter Ho concluso con yorick, gor, djgusmy85, sulphur, Rospaccio, Leland Gaunt, paciuli
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Feb 2004
Città: BhO
Messaggi: 3701
|
ho provato sulla macchina e per erase() non c'è stato niente da fare...non trova la libreria curses.h !!!!
curses.h:No such file or directory
__________________
il cucchiaio non esiste...MondoIT: recensioni, appunti di vita da nerd, virtualizzazione e altre diavolerie informatiche Linux User 414915 linux counter Ho concluso con yorick, gor, djgusmy85, sulphur, Rospaccio, Leland Gaunt, paciuli
Ultima modifica di NeoNum6 : 05-01-2006 alle 00:35. |
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Se il tuo sistema usa i package RPM puoi provare a fare: rpm -qa | grep curses e vedere quali pacchetti ti visualizza.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Feb 2004
Città: BhO
Messaggi: 3701
|
...eehm...non uso linux...
__________________
il cucchiaio non esiste...MondoIT: recensioni, appunti di vita da nerd, virtualizzazione e altre diavolerie informatiche Linux User 414915 linux counter Ho concluso con yorick, gor, djgusmy85, sulphur, Rospaccio, Leland Gaunt, paciuli
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
La libreria Curses è "nata" originalmente sui sistemi Unix/Linux. Su altri sistemi non Unix, non esiste in modo "nativo". Ci sono sicuramente dei porting su altre piattaforme e uno di questi porting (che non ho mai usato ma so che esiste) è la PDCurses (Public Domain Curses), la trovi su http://pdcurses.sourceforge.net.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Feb 2004
Città: BhO
Messaggi: 3701
|
ma un modo un po più semplice proprio non c'è???
strano che un linguaggio potente come il C non possa fare cose così semplici
__________________
il cucchiaio non esiste...MondoIT: recensioni, appunti di vita da nerd, virtualizzazione e altre diavolerie informatiche Linux User 414915 linux counter Ho concluso con yorick, gor, djgusmy85, sulphur, Rospaccio, Leland Gaunt, paciuli
|
|
|
|
|
|
#19 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
system ("cls"); /* Per sistemi DOS/Win */ system ("clear"); /* Per sistemi Linux/Unix */ Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Feb 2004
Città: BhO
Messaggi: 3701
|
come mai l'uso di system è stupido?
sul resto hai sicuramente ragione tu!
__________________
il cucchiaio non esiste...MondoIT: recensioni, appunti di vita da nerd, virtualizzazione e altre diavolerie informatiche Linux User 414915 linux counter Ho concluso con yorick, gor, djgusmy85, sulphur, Rospaccio, Leland Gaunt, paciuli
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:10.



















