6.9 OS 機能

このライブラリは os テーブルに実装されます。

os.clock ()

プログラムが使用した総 CPU 時間の近似を返します (単位は秒)。返り値は ISO C 関数 clock が返す値を利用して計算されます。

os.date ([format [, time]])

日付と時刻を含んだ文字列またはテーブルを返します。返り値は与えられた文字列 format に従って成形されます。

引数 time が与えられた場合には、この値が成形されて返ります (time として渡すことができる値の説明は os.time にあります)。time が与えられなければ date は現在時刻を成形します。

format'!' で始まるなら、時刻は協定世界時 (UTC) で表されます。この省略可能なオプションの後に "*t" が続くなら、date は次のフィールドを持ったテーブルを返します:

最後の夏時間に関するフィールドは、情報が取得できない場合には設定されません。

format"*t" でない場合には、date は時刻を文字列に成形して返します。そのときは ISO C 関数 strftime と同じ規則が使われます。

format が与えられないときのデフォルト値は "%c" です。これにより現在のロケールを使った日付と時刻が人間が読めるフォーマットで返ります。

POSIX でないシステムでは、C 関数 gmtimelocaltime の関係でこの関数がスレッドセーフでない可能性があります。

os.difftime (t2, t1)

時刻 t1 から時刻 t2 までの差を返します (単位は秒)。二つの時刻には os.time が返す値を使います。POSIX, Windows およびその他のシステムでは返り値が正確に t2 - t1 に等しくなります。

os.execute ([command])

この関数は ISO C 関数 system と等価です。command を OS のシェルに渡して実行します。一つ目の返り値はコマンドが正常に終了すれば true で、それ以外の場合は fail です。この関数はこれ以外に文字列と数値を返し、その意味は次の通りです:

command を指定せずに呼び出すと、os.execute はシェルが利用可能かを表す真偽値を返します。

os.exit ([code [, close]])

ISO C 関数 exit を呼び出してホストプログラムを終了します。codetrue なら状態コードとして EXIT_SUCCESS が返り、codefalse なら EXIT_FAILURE が返り、code が数値ならその値が返ります。code のデフォルトの値は true です。

省略可能な第二引数 closetrue なら、この関数はプログラムを終了する前に Lua ステートをクローズします。

os.getenv (varname)

プロセスの環境変数 varname の値を返します。この環境変数が定義されていなければ fail が返ります。

os.remove (filename)

指定された名前のファイルを削除します。POSIX システムでは加えて空のディレクトリも削除できます。この関数が失敗すると、fail とエラーを説明する文字列とエラーコードが返ります。成功すれば true が返ります。

os.rename (oldname, newname)

oldname という名前のファイルまたはディレクトリを newname にリネームします。この関数が失敗すると、fail とエラーを説明する文字列とエラーコードが返ります。成功すれば true が返ります。

os.setlocale (locale [, category])

プログラムが持つ現在のロケールを設定します。locale はロケールを指定する文字列であり、有効な値はシステムによって異なります。category は変更するカテゴリを表す省略可能な文字列であり、指定する場合には "all", "collate", "ctype", "monetary", "numeric", "time" のいずれかとします。デフォルトの category"all" です。関数の要求に答えることができれば新しいロケールを返し、答えられなければ fail を返します。

locale を空文字列とすると、現在のロケールが実装依存のネイティブロケールに設定されます。locale を文字列 "C" とすると、現在のロケールが標準規格に定義される C ロケールに設定されます。

第一引数を nil として呼び出すと、この関数は指定されたカテゴリに設定されている現在のロケールの名前を返します。

この関数は C 関数 setlocale を利用するので、スレッドセーフでない可能性があります。

os.time ([table])

引数無しに呼ぶと現在時刻を返し、テーブルを引数として呼ぶとそのテーブルが指定するローカル日時と時刻を表す値を返します。引数として渡されるテーブルは year, month, day フィールドを持っていいる必要があり、加えて hour (デフォルトは 12)・min (デフォルトは 0)・sec (デフォルトは 0)・isdst (デフォルトは nil) を持つことができます。他のフィールドは無視されます。これらのフィールドの説明は os.date 関数を参照してください。

os.time が呼ばれるとき、table のフィールドが正当な範囲の値を持っている必要はありません。例えば sec が -10 の table は他のフィールドによって指定される時刻の 10 秒前を意味します。また hour が 1000 の table は他のフィールドによって指定される時刻の 1000 時間後を意味します。

返り値は数値であり、その意味はシステムによって異なります。POSIX と Windows を含むシステムでは、返り値は特定の時刻 (“エポック”) からの経過時刻を表します。他のシステムでは返り値の意味が定まっていないこともあり、その場合 time の返り値は os.dateos.difftime の引数としてのみ使うことができます。

テーブルを渡して呼び出すとき、os.time はテーブルのフィールドを os.date にあるように正規化します。つまり同じ時刻を表したまま各フィールドが正当な範囲に収まるように変更されます。

os.tmpname ()

一時ファイルとして利用できるファイルの名前を文字列として返します。ファイルは使い始める前にオープンし、使った後に削除しなければなりません。

POSIX システムではセキュリティリスクを避けるために、この関数は返り値と同じ名前のファイルを作成します (名前を取得してファイルを作成するまでの間に誰かが同じ名前のファイルを異なる権限で作成する可能性があるからです)。ただしファイルのオープンと削除は依然必要です (使わないときでも削除は必要です)。

可能な場合には、プログラムが終了したときにファイルが自動的に削除される io.tmpfile を使うことをお勧めします。