GNU/Linux >> Tutoriales Linux >  >> Linux

Convertir milisegundos a especificación de tiempo para el puerto GNU

El timespec La estructura representa el tiempo en dos partes:segundos y nanosegundos. Por lo tanto, el algoritmo para la conversión de milisegundos es bastante simple. Un segundo tiene mil milisegundos, un milisegundo tiene mil microsegundos y un microsegundo tiene mil nanosegundos, por lo que agradecemos a SI. Por lo tanto, primero debemos dividir los milisegundos por mil para obtener una cantidad de segundos. Digamos, por ejemplo, 1500 milisegundos / 1000 =1,5 segundos. Dada la aritmética de enteros (no un punto flotante), el resto se elimina (es decir, 1500/1000 es igual a solo 1, no 1,5). Luego, debemos tomar un resto que denota una cantidad de milisegundos que definitivamente es menos de un segundo y multiplicarlo por un millón para convertirlo en nanosegundos. Para obtener un resto de dividir por 1000, usamos un operador de módulo (% ) (es decir, 1500 % 1000 is equal to 500 ). Por ejemplo, convirtamos 4321 milisegundos a segundos y nanosegundos:

  1. 4321 (milisegundos) / 1000 =4 (segundos)
  2. 4321 (milisegundos) % 1000 =321 (milisegundos)
  3. 321 (milisegundos) * 1000000 =321000000 (nanosegundos)

Sabiendo lo anterior, lo único que queda es escribir un poco de código C. Hay algunas cosas que no hiciste bien:

  1. En C, debe prefijar los tipos de datos de estructura con struct . Por ejemplo, en lugar de decir timespec dices struct timespec . En C++, sin embargo, no tienes que hacerlo (desafortunadamente, en mi opinión).
  2. No puede devolver estructuras desde la función en C. Por lo tanto, debe pasar una estructura por puntero a una función que haga algo con esa estructura.

Editar:Esto contradice (Devuelve una `estructura` de una función en C).

Bien, basta de hablar. A continuación se muestra un ejemplo de código C simple:

#include <time.h>
#include <stdlib.h>
#include <stdio.h>

static void ms2ts(struct timespec *ts, unsigned long ms)
{
    ts->tv_sec = ms / 1000;
    ts->tv_nsec = (ms % 1000) * 1000000;
}

static void print_ts(unsigned long ms)
{
    struct timespec ts;
    ms2ts(&ts, ms);
    printf("%lu milliseconds is %ld seconds and %ld nanoseconds.\n",
           ms, ts.tv_sec, ts.tv_nsec);
}

int main()
{
    print_ts(1000);
    print_ts(2500);
    print_ts(4321);
    return EXIT_SUCCESS;
}

Espero eso ayude. ¡Buena suerte!


Linux
  1. Consejos de Linux para usar GNU Screen

  2. 5 consejos para el depurador GNU

  3. Synfig:una alternativa de Adobe Animate para GNU/Linux

  4. Temps:una aplicación inteligente y hermosa del tiempo para GNU/Linux

  5. Depende.exe para GNU/Linux

Cómo cambiar el puerto de Jenkins

Cómo comprobar los puertos de escucha en Linux (Puertos en uso)

SSLH:comparta un mismo puerto para HTTPS y SSH

Mejora automática de imagen para Ubuntu

Escuche la solicitud de wakeonlan

puerto abierto 8080 para escuchar