GNU/Linux >> Znalost Linux >  >> Linux

Co je time_t nakonec typedef pro?

Článek time_t na Wikipedii to trochu osvětlí. Základem je typ time_t není zaručeno ve specifikaci C.

time_t datový typ je datový typ v knihovně ISO C definovaný pro ukládání hodnot systémového času. Takové hodnoty jsou vráceny ze standardu time() funkce knihovny. Tento typ je definován jako atypedef ve standardheader. ISO C definujetime_t jako aritmetický typ, ale neurčuje žádný konkrétní typ ,rozsah, rozlišení nebo kódování pro to.Nespecifikován je také význam aritmetických operací aplikovaných na časové hodnoty.

Systémy kompatibilní s Unixem a POSIX implementují time_t zadejte jako signed integer (obvykle 32 nebo 64 bitů široký), což představuje počet sekund od začátku epochy Unix :půlnoc UTC z 1. ledna 1970 (bez přestupných sekund). Některé systémy správně zpracovávají záporné časové hodnoty, zatímco jiné ne. Systémy používající 32bitové time_t typu jsou náchylné k problému roku 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;

Je definován v $INCDIR/bits/types.h přes:

# 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

Standardy

William Brendel citoval Wikipedii, ale já to preferuji z koňské tlamy.

Standardní návrh C99 N1256 7.23.1/3 "Složky času" říká:

Deklarované typy jsou size_t (popsané v 7.17), clock_t a time_t, což jsou aritmetické typy schopné reprezentovat časy

a 6.2.5/18 „Typy“ říká:

Celočíselné a plovoucí typy se souhrnně nazývají aritmetické typy.

POSIX 7 sys_types.h říká:

[CX] time_t musí být celočíselný typ.

kde [CX] je definován jako:

[CX] Rozšíření standardu ISO C.

Je to rozšíření, protože poskytuje silnější záruku:plovoucí čárky jsou mimo.

gcc one-liner

Není třeba vytvářet soubor, jak uvádí Quassnoi:

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

Na Ubuntu 15.10 GCC 5.2 jsou dva horní řádky:

typedef long int __time_t;
typedef __time_t time_t;

Rozdělení příkazů s některými uvozovkami z man gcc :

  • -E :"Zastavte se po fázi předběžného zpracování; nespouštějte správný kompilátor."
  • -xc :Určete jazyk C, protože vstup pochází z stdin, který nemá příponu souboru.
  • -include file :"Zpracujte soubor, jako by se na prvním řádku primárního zdrojového souboru objevilo "#include "file""
  • - :vstup z stdin

Linux
  1. Co dělá „lc_all=c“?

  2. Jaký typ terminálu podporovat při implementaci emulátoru terminálu?

  3. Co dělá ?

  1. Co je uživatel Linuxu?

  2. Jaké rozložení klávesnice mi umožňuje psát ç?

  3. mount -t TYP / - jak poznat, co by mohl být TYP?

  1. Co je to sysadmin?

  2. Když zadáte „ls -a“, jaký je význam „.“ A ".."?

  3. Maximální hodnoty pro time_t (struct timespec)