GNU/Linux >> Linux Esercitazione >  >> Linux

A cosa è time_t in definitiva un typedef?

L'articolo dell'articolo di Wikipedia time_t fa luce su questo. La linea di fondo è che il tipo di time_t non è garantito nella specifica C.

Il time_t tipo di dati è un tipo di dati nella libreria ISO C definita per la memorizzazione dei valori dell'ora di sistema. Tali valori vengono restituiti dallo standard time() funzione di libreria. Questo tipo è un typedef definito nell'intestazione standard. ISO C definisce time_t come un tipo aritmetico, ma non specifica alcun tipo particolare , intervallo, risoluzione o codifica. Anche i significati delle operazioni aritmetiche applicate ai valori temporali non sono specificati.

I sistemi compatibili con Unix e POSIX implementano il time_t digitare come signed integer (tipicamente 32 o 64 bit di larghezza) che rappresenta il numero di secondi dall'inizio dell'epoca Unix :mezzanotte UTC del 1 gennaio 1970 (senza contare i secondi intercalari). Alcuni sistemi gestiscono correttamente i valori temporali negativi, mentre altri no. Sistemi che utilizzano time_t a 32 bit sono suscettibili al problema dell'anno 2038.


[root]# cat time.c

#include <time.h>

int main(int argc, char** argv)
{
        time_t test;
        return 0;
}

[root]# gcc -E time.c | grep __time_t

typedef long int __time_t;

È definito in $INCDIR/bits/types.h tramite:

# 131 "/usr/include/bits/types.h" 3 4
# 1 "/usr/include/bits/typesizes.h" 1 3 4
# 132 "/usr/include/bits/types.h" 2 3 4

Standard

William Brendel ha citato Wikipedia, ma lo preferisco dalla bocca del cavallo.

Bozza standard C99 N1256 7.23.1/3 "Componenti del tempo" dice:

I tipi dichiarati sono size_t (descritti in 7.17) clock_t e time_t che sono tipi aritmetici in grado di rappresentare tempi

e 6.2.5/18 "Tipi" dice:

I tipi interi e mobili sono chiamati collettivamente tipi aritmetici.

POSIX 7 sys_types.h dice:

[CX] time_t deve essere un tipo intero.

dove [CX] è definito come:

[CX] Estensione allo standard ISO C.

È un'estensione perché fornisce una garanzia più forte:i punti mobili sono eliminati.

una riga di gcc

Non c'è bisogno di creare un file come menzionato da Quassnoi:

echo | gcc -E -xc -include 'time.h' - | grep time_t

Su Ubuntu 15.10 GCC 5.2 le prime due righe sono:

typedef long int __time_t;
typedef __time_t time_t;

Suddivisione dei comandi con alcune virgolette da man gcc :

  • -E :"Arresta dopo la fase di pre-elaborazione; non eseguire il compilatore vero e proprio."
  • -xc :Specifica il linguaggio C, poiché l'input proviene da stdin che non ha estensione di file.
  • -include file :"Elabora il file come se "#include "file"" apparisse come prima riga del file sorgente primario."
  • - :input da stdin

Linux
  1. Che tipo di terminale supportare se si implementa un emulatore di terminale??

  2. Quale layout di tastiera mi consente di digitare ç?

  3. Valori massimi per time_t (struct timespec)

  4. Cosa dovrei usare al posto di windows.h in Linux?

  5. Qual è lo scopo del codice di partizione home Linux 8302?

Cos'è SSH?

Cos'è l'SFTP?

Tipo di comando Linux

Cos'è l'hypervisor e quali sono i suoi tipi

Che cos'è un hypervisor? Qual è la differenza tra il tipo 1 e 2?

Qual è il modo corretto di installare jdk su Linux