¿Cómo el tiempo de función C () trata los segundos fraccionarios?

La función time() devolverá los segundos desde 1970. Quiero saber cómo hace el redondeo para el segundo devuelto.

Por ejemplo, para 100.4s, ¿devolverá 100 o 101?

¿Hay una definición explícita?

La norma ISO C no dice mucho. Sólo dice que el time() regresa.

La mejor aproximación de la implementación al calendario actual.

El resultado es de tipo time_t , que es un tipo real (entero o punto flotante) “capaz de representar tiempos”.

Muchos sistemas implementan time_t como un tipo entero con signo que representa la cantidad total de segundos desde 1970-01-01 00:00:00 GMT.

Un experimento rápido en mi sistema Ubuntu (comparando los valores devueltos por time() y gettimeofday() ) indica que el valor devuelto por time() está truncado, por ejemplo, si el tiempo de alta precisión es 1514866171.750058 , la función time() Volverá 1514866171 . Ni ISO C ni POSIX lo garantizan, pero esperaría que se comporte de manera consistente en cualquier sistema similar a UNIX.

7.27.2.4p3

La función de tiempo devuelve la mejor aproximación de la implementación al tiempo del calendario actual. El valor (time_t) (- 1) se devuelve si el tiempo del calendario no está disponible. Si el temporizador no es un puntero nulo, el valor de retorno también se asigna al objeto al que apunta.

Su implementación está definida, por lo tanto, a menos que especifique su comstackdor y sistema operativo, la respuesta es “la mejor aproximación”.

¿Hay una definición explícita?

No


http://en.cppreference.com/w/c/chrono/time

La encoding del tiempo del calendario en time_t no está especificada, pero la mayoría de los sistemas cumplen con la especificación POSIX y devuelven un valor de tipo integral que contiene el número de segundos desde la Época. Las implementaciones en las que time_t es un entero con signo de 32 bits (muchas implementaciones históricas) fallan en el año 2038.