0

Linux カーネルが提供するものtime_to_tm()(こちらを参照):

/**
 * time_to_tm - converts the calendar time to local broken-down time
 *
 * @totalsecs   the number of seconds elapsed since 00:00:00 on January 1, 1970,
 *              Coordinated Universal Time (UTC).
 * @offset      offset seconds adding to totalsecs.
 * @result      pointer to struct tm variable to receive broken-down time
 */
void time_to_tm(time_t totalsecs, int offset, struct tm *result)

説明によると、tm現地の故障時間になります。tmしたがって、ローカル タイム ゾーンと DST が尊重されることを理解しています。これが正しければ、コードには表示されません。

offsetローカル タイム ゾーンと DST を「提供」するために引数を使用する必要があるのではないでしょうか。

アップデート

この質問に従って、 sys_tzと組み合わせて使用​​すると、 time_to_tm()「真の」現地時間を取得できますか? 私の知る限り、現地時間表記はユーザーランドに属します。たとえば、DST はタイム ゾーンごとに特別にコンパイルされた構成ファイルで定義されます。

よくわかりません。sys_tzin kernel thanの意味は何ですか?

4

2 に答える 2

3

カーネルは、タイムゾーンや DST を認識したり気にしたりしません。カーネルが行うことはすべて、エポックからの秒単位です。タイムゾーンと DST は、ユーザー モードのライブラリによって処理されます。これにより、環境変数がチェックされ、タイムゾーン ファイルがスキャンされます。

この関数は、エンド ユーザーが呼び出すことはできません。これに対するシステム コール インターフェイスはありません。カーネル内で内部的に使用されるだけです。相互参照 (http://lxr.free-electrons.com/ident?v=2.6.33;i=time_to_tm) を見ると、現在呼び出されている唯一の場所は FAT ファイルシステム ドライバーです。実際、タイムゾーンを調整するために使用されます。tzoffマウントオプションをサポートするために行われました。

于 2012-09-02T16:28:00.023 に答える
1

settimeofday()ユーザー空間は、ローカル時間とタイムゾーンをカーネルに渡すために呼び出すことができます。タイムゾーンは に格納されます (をsys_tz参照)。カーネルは主にローカル時間をユーザー空間に戻すために使用しますが、タイムゾーンも使用したい場所がいくつかあります。do_sys_settimeofday()kernel/time.csys_tzgettimeofday()fs/fat

于 2012-09-08T06:43:54.287 に答える