GNU/Linux >> Tutoriales Linux >  >> Linux

¿De qué es time_t en última instancia, una definición de tipo?

El artículo de Wikipedia time_t arroja algo de luz sobre esto. La conclusión es que el tipo de time_t no está garantizado en la especificación C.

El time_t datatype es un tipo de datos en la biblioteca ISO C definido para almacenar valores de tiempo del sistema. Dichos valores se devuelven desde el estándar time() función de biblioteca. Este tipo es un typedef definido en el encabezado estándar. ISO C define time_t como un tipo aritmético, pero no especifica ningún tipo en particular ,rango, resolución o codificación. Tampoco se especifican los significados de las operaciones aritméticas aplicadas a los valores de tiempo.

Los sistemas compatibles con Unix y POSIX implementan el time_t escriba como signed integer (típicamente 32 o 64 bits de ancho) que representa el número de segundos desde el comienzo de la época de Unix :medianoche UTC del 1 de enero de 1970 (sin contar los segundos bisiestos). Algunos sistemas manejan correctamente los valores de tiempo negativos, mientras que otros no. Sistemas que utilizan time_t de 32 bits son susceptibles al problema del año 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;

Está definido en $INCDIR/bits/types.h a través de:

# 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

Estándares

William Brendel citó Wikipedia, pero yo lo prefiero con la boca del caballo.

C99 N1256 borrador estándar 7.23.1/3 "Componentes del tiempo" dice:

Los tipos declarados son size_t (descrito en 7.17) clock_t y time_t que son tipos aritméticos capaces de representar tiempos

y 6.2.5/18 "Tipos" dice:

Los tipos enteros y flotantes se denominan colectivamente tipos aritméticos.

POSIX 7 sys_types.h dice:

[CX] time_t debe ser de tipo entero.

donde [CX] se define como:

[CX] Ampliación de la norma ISO C.

Es una extensión porque hace una garantía más fuerte:los puntos flotantes están fuera.

gcc de una sola línea

No es necesario crear un archivo como lo menciona Quassnoi:

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

En Ubuntu 15.10 GCC 5.2, las dos líneas superiores son:

typedef long int __time_t;
typedef __time_t time_t;

Desglose de comandos con algunas citas de man gcc :

  • -E :"Deténgase después de la etapa de preprocesamiento; no ejecute el compilador correctamente".
  • -xc :especifique el lenguaje C, ya que la entrada proviene de stdin que no tiene extensión de archivo.
  • -include file :"Procesar archivo como si "#include" archivo "" apareciera como la primera línea del archivo fuente principal".
  • - :entrada desde stdin

Linux
  1. ¿Qué es un usuario de Linux?

  2. ¿Qué es un administrador de sistemas?

  3. ¿Qué hace “lc_all=c”?

  4. Cuando escribe "ls -a", ¿cuál es el significado de "." Y ".."?

  5. ¿Qué tipo de terminal admitir si se implementa un emulador de terminal?

¿Qué es SSH?

¿Qué es SFTP?

Comando de tipo Linux

¿Qué es el hipervisor y cuáles son sus tipos?

¿Qué diseño de teclado me permite escribir ç?

¿Qué es un Hipervisor? ¿Cuál es la diferencia entre el tipo 1 y 2?