Newsgroup: it.comp.lang.c
Titolo: mktime() ritorna -1 sob!

Ciao,
sto facendo un programmino e bisogno di schivere delle date su un file. Ho
deciso, prima di scrivere su file, di convertire la struct tm in un time_t.
In questo modo scrivo solo un long.
Ho visto che esite la funzione: time_t mktime(struct tm *ntime) ed ho
provato ad usarla. Ritorna sempre il valore -1, che molto probabilmente
indica un errore.
L'argomento della mktime()e' un puntatore ad una struttura di tipo tm, ed io
ho provato a passare questa struttura in molti modi;
- ho passato la struct
- ho passato l'indirizzo della struct
- ho passato un puntatore che punta alla struct
 ma il risultato è sempre lo stesso: -1.
Tra le altre cose per la prima volta mi sono trovato questo messaggio, mai
successo:
D:\Luca\MY\Programmi\Miei_programmi\Controllo_peso\VAR\data1.c(53) : warning
C4013: 'exit' undefined; assuming extern returning int
Allego, nel corpo del messaggio  il file e la dicitura relativa alla mktime
che ho trovato sul libro, potete darmi qualche dritta?
Ciao Luca
---------------
[...]
La conversione dell'altro senso, dauna struttura tm a un valore di tipo
time_t, è svolta dalla funzione mktime() il cui prototipoTIPO è il seguente:
time_t mktime(struct tm *ntime);
La funzione restituisce il numero di secondi trascorsi dall' 1 gennaio 1970
all'istante rappresentato dalla struttura tm alla quale punta n time.
[...]
Sorgente:
/*
+--------------------------------------------------------------------------+
| Sorgente: data1.c                                                        |
| Creato:   05/04/2004                                                     |
+--------------------------------------------------------------------------+
*/
#include<stdio.h>
#include<time.h>
struct tm tempus, *ptr_tempus = &tempus;
//ptr_tempus = &tempus
time_t secondi;
FILE *fp;
int main()
{
  printf("Inserisci data di oggi (gg/mm/aaa): ");
  scanf("%d%d%d", &tempus.tm_mday, &tempus.tm_mon, &tempus.tm_year);
  // stampa tutta la struttura tempus
  printf("Giorno: %d \nMese: %d \nAnno: %d \n",
    tempus.tm_mday, tempus.tm_mon, tempus.tm_year);
  // converte la struttura tm in time_t
  secondi= mktime(ptr_tempus);
  // qui non ho usato puntatori
  // secondi= mktime(tempus);
  // qui non ho usato puntatori
  // secondi= mktime(&tempus);
  //verifico che abbia fatto qualchecosa
  printf("Secondi: %ld\n", secondi);
  // scrive su file
  if((fp= fopen("tempo.txt","w")) == NULL)
  {
    fprintf(stderr,"Errore nell'apertua del file.");
    exit(1);
  }
  fprintf(fp, "%ld", secondi);
  fclose(fp);
  return 0;
 }
---------------------

 indica un errore.
Sinceramente non ho voglia di fare quello che dovresti fare
tu, ovvero studiare la documentazione della funzione mktime.
Comunque se ti serve solo il tempo in secondi passato dal
primo gennaio 1970 allora dimenticati la mktime e le strutture varie:
ti basta usare la funzione time() (meglio che vai a leggere quello che fa)
long tempusfugit;
tempusfugit =  (long) time(NULL);
per poter usare la funzione time() devi aggiungere in cima
la dichiarazione
#include<time.h>
Analogamente, per poter usare la funzione exit()
devi aggiungere
#include<stdlib.h>
ciao,
g.

ti basta usare la funzione time() (meglio che vai a leggere quello che fa)
   Pignoleggio giusto perche` siamo in it.comp.lang.c, e allora, anche
se il comportamento dei sistemi *nix e` quasi lo standard, se si parla
di <time.h>, mi preme far osservare che non ha la valenza di uno
standard.
7.23.2.4 The time function
Synopsis
1   #include <time.h>
    time_t time(time_t *timer);
  Description
2   The time function determines the current calendar time. The
    encoding of the value is unspecified.
-- 
S.L.