GNU/Linux >> Linux Esercitazione >  >> Linux

Converti millisecondi in timespec per la porta GNU

Il timespec La struttura rappresenta il tempo in due porzioni:secondi e nanosecondi. Pertanto, l'algoritmo per la conversione da millisecondi è dannatamente semplice. Un secondo ha mille millisecondi, un millisecondo ha mille microsecondi e un microsecondo ha mille nanosecondi, per i quali siamo grati a SI. Pertanto, dobbiamo prima dividere i millisecondi per mille per ottenere un numero di secondi. Supponiamo, ad esempio, 1500 millisecondi/1000 =1,5 secondi. Data l'aritmetica dei numeri interi (non un punto mobile), il resto viene eliminato (ovvero 1500/1000 è uguale a solo 1, non 1,5). Quindi dobbiamo prendere un resto che denota un numero di millisecondi decisamente inferiore a un secondo e moltiplicarlo per un milione per convertirlo in nanosecondi. Per ottenere il resto della divisione per 1000, usiamo un operatore di modulo (% ) (ovvero 1500 % 1000 is equal to 500 ). Ad esempio, convertiamo 4321 millisecondi in secondi e nanosecondi:

  1. 4321 (millisecondi) / 1000 =4 (secondi)
  2. 4321 (millisecondi) % 1000 =321 (millisecondi)
  3. 321 (millisecondi) * 1000000 =321000000 (nanosecondi)

Sapendo quanto sopra, l'unica cosa che rimane è scrivere un po' di codice C. Ci sono alcune cose che non hai capito bene:

  1. In C, devi prefissare i tipi di dati della struttura con struct . Ad esempio, invece di dire timespec tu dici struct timespec . In C++, tuttavia, non sei obbligato a farlo (sfortunatamente, secondo me).
  2. Non puoi restituire strutture dalla funzione in C. Pertanto, devi passare una struttura per puntatore in una funzione che faccia qualcosa con quella struttura.

Modifica:questo contraddice (Restituisci una `struct` da una funzione in C).

OK, basta parlare. Di seguito è riportato un semplice esempio di codice C:

#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;
}

Spero che sia d'aiuto. Buona fortuna!


Linux
  1. Dormi per millisecondi

  2. Come selezionare un numero di porta statico per un'app personalizzata?

  3. come modificare il numero di porta per l'installazione di Jenkins In Ubuntu 12.04

  4. Scelta del filesystem per GNU/Linux su una scheda SD

  5. Hardware ideale per laptop GNU/Linux

Come cambiare la porta per Jenkins

Come controllare le porte di ascolto in Linux (porte in uso)

Shedbuilt GNU/Linux:una distribuzione educativa esclusivamente per schede ARM

SSLH:condividi una stessa porta per HTTPS e SSH

Miglioramento automatico dell'immagine per Ubuntu

Ascolta la richiesta wakeonlan