GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist time_t letztendlich ein Typedef?

Der Wikipedia-Artikel time_t bringt etwas Licht ins Dunkel. Unterm Strich ist der Typ time_t wird in der C-Spezifikation nicht garantiert.

Die time_t Datentyp ist ein Datentyp in der ISO-C-Bibliothek, der zum Speichern von Systemzeitwerten definiert ist. Solche Werte werden vom Standard time() zurückgegeben Bibliotheksfunktion. Dieser Typ ist eine im Standardheader definierte typedef. ISO C definiert time_t als arithmetischen Typ, spezifiziert aber keinen bestimmten Typ , Bereich, Auflösung oder Kodierung dafür. Ebenfalls nicht spezifiziert sind die Bedeutungen arithmetischer Operationen, die auf Zeitwerte angewendet werden.

Unix- und POSIX-kompatible Systeme implementieren den time_t als signed integer eingeben (normalerweise 32 oder 64 Bit breit), was die Anzahl der Sekunden seit Beginn der Unix-Epoche darstellt :Mitternacht UTC vom 1. Januar 1970 (ohne Schaltsekunden). Einige Systeme verarbeiten negative Zeitwerte korrekt, andere nicht. Systeme mit einem 32-Bit time_t Typ sind anfällig für das Jahr-2038-Problem.


[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;

Es ist in $INCDIR/bits/types.h definiert durch:

# 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

Normen

William Brendel hat Wikipedia zitiert, aber ich bevorzuge es aus eigener Feder.

C99 N1256 Standardentwurf 7.23.1/3 "Komponenten der Zeit" sagt:

Die deklarierten Typen sind size_t (beschrieben in 7.17), clock_t und time_t, die arithmetische Typen sind, die Zeiten darstellen können

und 6.2.5/18 "Typen" sagt:

Integer- und Floating-Typen werden gemeinsam als arithmetische Typen bezeichnet.

POSIX 7 sys_types.h sagt:

[CX] time_t muss ein ganzzahliger Typ sein.

wobei [CX] ist definiert als:

[CX] Erweiterung des ISO-C-Standards.

Es ist eine Erweiterung, weil es eine stärkere Garantie gibt:Fließkommazahlen sind out.

gcc-Einzeiler

Keine Notwendigkeit, eine Datei zu erstellen, wie von Quassnoi erwähnt:

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

Unter Ubuntu 15.10 GCC 5.2 lauten die oberen beiden Zeilen:

typedef long int __time_t;
typedef __time_t time_t;

Befehlsaufschlüsselung mit einigen Anführungszeichen aus man gcc :

  • -E :"Stopp nach der Vorverarbeitungsphase; führe den Compiler nicht richtig aus."
  • -xc :Geben Sie die C-Sprache an, da die Eingabe von stdin kommt, das keine Dateierweiterung hat.
  • -include file :"Datei verarbeiten, als ob "#include "Datei"" als erste Zeile der primären Quelldatei erscheinen würde."
  • - :Eingabe von stdin

Linux
  1. Wenn Sie „ls -a“ eingeben, was ist die Bedeutung von „.“ Und ".."?

  2. Welche Art von Terminal soll unterstützt werden, wenn ein Terminal-Emulator implementiert wird?

  3. Maximalwerte für time_t (struct timepec)

  4. Was sollte ich anstelle von windows.h unter Linux verwenden?

  5. Was ist der Unterschied zwischen ls und l?

Was ist SSH?

Was ist SFTP?

Linux-Typ-Befehl

Was ist ein Systemadministrator?

Was ist Hypervisor und welche Typen gibt es?

Was ist ein Hypervisor? Was ist der Unterschied zwischen Typ 1 und 2?