GNU/Linux >> Tutoriels Linux >  >> Linux

À quoi time_t est-il finalement un typedef ?

L'article de l'article time_t de Wikipédia apporte un éclairage à ce sujet. L'essentiel est que le type de time_t n'est pas garanti dans la spécification C.

Le time_t datatype est un type de données dans la bibliothèque ISO C défini pour stocker les valeurs de temps système. Ces valeurs sont renvoyées par le standard time() fonction bibliothèque. Ce type est un typedef défini dans l'en-tête standard. ISO C définit time_t comme un type arithmétique, mais ne spécifie aucun type particulier ,la plage, la résolution ou l'encodage correspondant. La signification des opérations arithmétiques appliquées aux valeurs temporelles n'est pas non plus spécifiée.

Les systèmes compatibles Unix et POSIX implémentent le time_t tapez comme un signed integer (typiquement 32 ou 64 bits de large) qui représente le nombre de secondes depuis le début de l'époque Unix :minuit UTC du 1er janvier 1970 (sans compter les secondes intercalaires). Certains systèmes gèrent correctement les valeurs temporelles négatives, tandis que d'autres ne le font pas. Systèmes utilisant un time_t 32 bits type sont sensibles au problème de l'année 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;

Il est défini dans $INCDIR/bits/types.h par :

# 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

Normes

William Brendel a cité Wikipédia, mais je le préfère de la bouche du cheval.

Projet de norme C99 N1256 7.23.1/3 "Composantes du temps" dit :

Les types déclarés sont size_t (décrits en 7.17) clock_t et time_t qui sont des types arithmétiques capables de représenter des temps

et 6.2.5/18 "Types" dit :

Les types entiers et flottants sont collectivement appelés types arithmétiques.

POSIX 7 sys_types.h indique :

[CX] time_t doit être un type entier.

[CX] est défini comme :

[CX] Extension à la norme ISO C.

C'est une extension car elle donne une garantie plus forte :les virgules flottantes sont supprimées.

gcc one-liner

Inutile de créer un fichier comme mentionné par Quassnoi :

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

Sur Ubuntu 15.10 GCC 5.2, les deux premières lignes sont :

typedef long int __time_t;
typedef __time_t time_t;

Répartition des commandes avec quelques citations de man gcc :

  • -E :"Arrêtez après l'étape de prétraitement ; ne lancez pas le compilateur proprement dit."
  • -xc  :Spécifiez le langage C, car l'entrée provient de stdin qui n'a pas d'extension de fichier.
  • -include file :"Traiter le fichier comme si "#include "fichier"" apparaissait comme première ligne du fichier source principal."
  • - :entrée depuis stdin

Linux
  1. Valeurs maximales pour time_t (struct timespec)

  2. Que dois-je utiliser à la place de windows.h sous Linux ?

  3. Quelle est la bonne façon d'installer jdk sur linux

  4. Quel est le but du code de partition Linux home 8302 ?

  5. Quel est l'ID de partition/le type de système de fichiers pour UDF ?

Qu'est-ce que SSH ?

Qu'est-ce que SFTP ?

Commande de type Linux

Qu'est-ce qu'un hyperviseur et quels sont ses types

Quelle disposition de clavier me permet de taper ç ?

Qu'est-ce qu'un Hyperviseur ? Quelle est la différence entre les types 1 et 2 ?