GNU/Linux >> Znalost Linux >  >> Linux

Nastavte systémové datum a čas pomocí C++ v Linuxu

Špatně to chápeš. settimeofday(2) nastavuje čas epochy. což je datum i čas. Doba čtení(7)

Pokud tedy začnete od řetězce vyjadřujícího datum, převeďte tento řetězec pomocí strptime(3) na struct tm pak to převeďte na unixový čas pomocí mktime(3) a poté to vložte do settimeofday (tj. tv_sec pole).

Nicméně settimeofday vyžaduje oprávnění root a domnívám se, že byste se obvykle měli vyvarovat jeho volání (alespoň na běžných počítačích připojených k internetu). Raději si na svém počítači s Linuxem nastavte nějakou službu klienta NTP (např. spusťte ntpd nebo chrony a obecně si přečtěte kapitolu sysadmin o udržování času...). Viz také adjtimex(2)

BTW, náhlá změna systémového času na multitaskingovém systému – jako je Linux nebo Windows – je velmi nebezpečná operace (protože naruší a naruší mnoho systémových úloh v závislosti na čase). Existuje několik dobrých důvodů, proč to udělat (obecně je to velmi špatný nápad). Pokud to uděláte, udělejte to s velmi malým počtem spuštěných programů a služeb (např. Linux v režimu jednoho uživatele). V běžném kódu aplikace byste to neměli dělat.


Píšu tento kus kódu pro nastavení data a času pod Linuxem.

#include <time.h>

struct tm time = { 0 };

time.tm_year = Year - 1900;
time.tm_mon  = Month - 1;
time.tm_mday = Day;
time.tm_hour = Hour;
time.tm_min  = Minute;
time.tm_sec  = Second;

if (time.tm_year < 0)
{
    time.tm_year = 0;
}

time_t t = mktime(&time);

if (t != (time_t) -1)
{
    stime(&t);
}

Všimněte si, že stime vyžaduje root privilegia.


Linux
  1. Použití příkazu timedatectl ke změně času a data v systému RHEL7 Linux

  2. Automatizujte odezvu pomocí Expect a Autoexpect v Linuxu

  3. Nastavte datum, čas a časové pásmo na serveru Linux

  1. Jak zobrazit datum a čas restartu systému Linux

  2. Získání data a času spuštění systému v Linuxu

  3. Nastavte relativní čas pomocí příkazového řádku

  1. Jak nastavit datum a čas na AlmaLinuxu

  2. Jak kompilovat C, C++ a Java pomocí terminálu v Linuxu

  3. 7 Linux Date Příklady příkazů pro zobrazení a nastavení systémového data a času