View Full Version : [C/C++] Posso assumere che l'Epoch sia hardware-independent?
Zero-Giulio
14-03-2014, 11:20
Vorrei utilizzare la Epoch in un sistema ultra-semplicistico di licenza di un software (in pratica, rilasciare un software che dopo tot gg smette di funzionare).
Quanto può andare bene usare l'Epoch?
Intendo, una cosa semplice tipo questa:
time_t rawtime;
struct tm * timeinfo;
time (&rawtime);
timeinfo = localtime (&rawtime);
strftime (buffer, 10, "%Y-%m-%d", timeinfo);
potrebbe funzionare?
Il pezzo di codice si fa dare il tempo passato dalla Epoch e lo converte in data.
Non mi è chiaro però se quelle 5 righe di codice possano funzionare su qualsiasi computer, o se nelle funzioni di sopra è implicito una Epoch pari al 1 gennaio 1970...
Intendo: è possibile che qualche pc abbia una Epoch diversa da 1970 e che il codice di sopra mi restituisca una data sbagliata?
Diciamo pure che per i miei scopi è importante solo l'anno e il mese (giorni, ore, minuti ecc... posso anche trascurarli), e che il target sarebbero i normali computer da ufficio.
Grazie mille :-)
Daniels118
14-03-2014, 15:01
La documentazione riporta che generalmente, la funzione time restituisce
il numero di secondi dalle ore 00:00 UTC del 1° gennario 1970.
Il problema è che l'implementazione di questa funzione varia da sistema a sistema, però sarebbe diabolico implementarla in modo che abbia un comportamento diverso, quindi io mi fiderei.
Il problema vero invece è che basta modificare l'orario del pc per fregare il sistema di licenza, ma questo è un altro discorso.
PS. in ogni caso tra l'hardware e le librerie del c tipicamente c'è il sistema operativo che si occupa di "livellare" le differenze hardware.
Zero-Giulio
17-03-2014, 08:43
Ah, io credevo che i secondi dall'Epoch fossero in qualche modo qualcosa di immodificabile.
Immaginavo che la data fosse gestita dal sistema operativo e modificabile dall'utente, mentre il numero di secondi restituito dalle funzioni che avevo riportato fosse in qualche modo immutabile e non gestito dall'utente.
Invece mi dici che sono collegate?
Cioè se io cambio la data nel mio sistema operativo poi la funzione "time" mi restituisce un diverso numero di secondi?
Cioè se io cambio la data nel mio sistema operativo poi la funzione "time" mi restituisce un diverso numero di secondi?
E direi!
Daniels118
17-03-2014, 11:41
Ah, io credevo che i secondi dall'Epoch fossero in qualche modo qualcosa di immodificabile.
Immaginavo che la data fosse gestita dal sistema operativo e modificabile dall'utente, mentre il numero di secondi restituito dalle funzioni che avevo riportato fosse in qualche modo immutabile e non gestito dall'utente.
Invece mi dici che sono collegate?
Cioè se io cambio la data nel mio sistema operativo poi la funzione "time" mi restituisce un diverso numero di secondi?
Non posso risponderti con assoluta certezza perché non ho modo di provare né ho la presunzione di conoscere il comportamento di tutti i sistemi operativi esistenti, però sappi che i pc (e non solo) non hanno la capacità di "conoscere" autonomamente la data; che la imposti manualmente o con un servizio di sincronizzazione sul web, l'informazione viene inserita sempre dall'esterno ed è facile modificarla.
Sarebbe più sensato interrogare un web server per conoscere la data, in modo che l'utente medio non sia in grado di manometterla; dico "l'utente medio" perché con delle modeste conoscenze si potrebbe facilmente raggirare anche questo metodo.
Oppure invece di prevedere una data di scadenza puoi immaginare un sistema "a consumo": utilizzando il programma viene incrementato un contatore salvato in un luogo nascosto, quando si raggiunge un valore predefinito il programma smette di funzionare.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.