GNU/Linux >> Linux の 問題 >  >> Linux

Linux で C++ を使用してシステムの日付と時刻を設定する

あなたは間違って理解しています。 settimeofday(2) はエポック時間を設定しています。これは日付と時刻の両方です。読み取り時間(7)

したがって、日付を表す文字列から開始する場合は、その文字列を strptime(3) で struct tm に変換します それを mktime(3) で Unix 時間に変換し、それを settimeofday にフィードします。 (つまり、tv_sec フィールド)

ただし、settimeofday ルート権限が必要であり、通常は呼び出すことを避けるべきだと思います(少なくとも通常のインターネットに接続されたコンピューターでは)。 Linux PC で NTP クライアント サービスを設定することをお勧めします (たとえば、ntpd または chrony を実行し、より一般的には、時間の管理に関する sysadmin の章を読んでください...)。 adjtimex(2)も参照

ところで、マルチタスキング システム (Linux や Windows など) でシステム時刻を突然変更することは非常に危険な操作です (時刻に応じて、または時刻を使用して多くのシステム タスクを混乱させ、妨害するため)。これを行う正当な理由はほとんどありません (一般的に非常に悪い考えです)。それを行う場合は、実行中のプログラムとサービスをほとんど使用しないでください (シングル ユーザー モードの Linux など)。通常のアプリケーション コードでこれを行うべきではありません。


Linux で日付と時刻を設定するために、このコードを書きます。

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

stime に注意してください root が必要です


Linux
  1. timedatectlコマンドを使用してRHEL7Linuxシステムの日時を変更する

  2. LinuxでExpectとAutoexpectを使用して応答を自動化する

  3. Linuxサーバーで日付、時刻、およびタイムゾーンを設定します

  1. Linux システムの再起動日時を表示する方法

  2. 7 システムの日付時刻を表示および設定するLinux Dateコマンドの例

  3. Linux でのシステム起動日時の取得

  1. AlmaLinuxで日付と時刻を設定する方法

  2. Linuxでターミナルを使用してC、C ++、およびJavaをコンパイルする方法

  3. コマンドラインを使用して相対時間を設定する