このページの内容

6.10 – オペレーティングシステム機能

このライブラリはテーブルosを通じて実装されています。


os.clock ()

基盤となるISO C関数clockが返す、プログラムによって使用されたCPU時間の秒数の近似値を返します。


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

指定された文字列formatに従って整形された日時を含む文字列またはテーブルを返します。

引数timeがある場合、それが整形する時刻です(この値の説明については関数os.timeを参照)。それ以外の場合、dateは現在時刻を整形します。

formatが’!’で始まる場合、日時は協定世界時で整形されます。この省略可能な文字の後で、formatが文字列”*t”なら、dateは次のフィールドを持つテーブルを返します:yearmonth(1–12)、day(1–31)、hour(0–23)、min(0–59)、sec(うるう秒のため0–61)、wday(曜日、1–7、日曜日が1)、yday(年内の通算日、1–366)、isdst(夏時間フラグ、ブール値)。情報を利用できない場合、最後のフィールドは存在しないことがあります。

formatが”*t”でない場合、dateはISO C関数strftimeと同じ規則に従って整形した日時を文字列として返します。

formatを省略した場合のデフォルトは”%c”で、現在のロケールを使った人間が読める日時表現になります。

POSIXでないシステムでは、C関数gmtimeとC関数localtimeに依存するため、この関数がスレッドセーフでない場合があります。


os.difftime (t2, t1)

時刻t1から時刻t2までの差を秒単位で返します(時刻はos.timeが返す値です)。POSIX、Windows、および一部のシステムでは、この値は正確にt2-t1です。


os.execute ([command])

この関数はISO C関数systemと等価です。オペレーティングシステムのシェルで実行するためにcommandを渡します。コマンドが正常に終了した場合、最初の結果はtrue、それ以外の場合はfailです。この最初の結果に続き、関数は次のように文字列と数値を返します。

  • exit:コマンドは正常に終了しました。続く数値はコマンドの終了ステータスです。
  • signal:コマンドはシグナルによって終了しました。続く数値はコマンドを終了させたシグナルです。 commandなしで呼び出した場合、os.executeはシェルが利用可能ならtrueとなるブール値を返します。

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

ISO C関数exitを呼び出してホストプログラムを終了します。codetrueの場合、返されるステータスはEXIT_SUCCESSです。codefalseの場合、返されるステータスはEXIT_FAILUREです。codeが数値の場合、返されるステータスはその数値です。codeのデフォルト値はtrueです。

省略可能な第2引数closeがtrueの場合、関数は終了前にLuaステートを閉じます(lua_closeを参照)。


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"のいずれかです。デフォルトのカテゴリーは"all"です。関数は新しいロケールの名前を返します。要求を満たせない場合はfailを返します。

localeが空文字列の場合、現在のロケールは実装定義のネイティブロケールに設定されます。localeが文字列”C”の場合、現在のロケールは標準Cロケールに設定されます。

第1引数をnilとして呼び出すと、この関数は指定されたカテゴリーの現在のロケール名を返すだけです。

C関数setlocaleに依存するため、この関数がスレッドセーフでない場合があります。


os.time ([table])

引数なしで呼び出すと現在のローカル時刻を返し、テーブルを指定すると、そのテーブルで指定されたローカルの日時を表す時刻を返します。このテーブルはフィールドyearmonthdayを持たなければならず、フィールドhour(デフォルトは12)、min(デフォルトは0)、sec(デフォルトは0)、isdst(デフォルトはnil)を持つことができます。そのほかのフィールドは無視されます。これらのフィールドの説明については、関数os.dateを参照してください。

関数を呼び出すとき、これらのフィールドの値は有効範囲内になくても構いません。たとえば、secが-10なら、ほかのフィールドで指定された時刻の10秒前を意味します。hourが1000なら、ほかのフィールドで指定された時刻の1000時間後を意味します。

返される値は数値で、その意味はシステムに依存します。POSIX、Windows、および一部のシステムでは、この数値は指定された開始時刻(「エポック」)からの秒数を数えます。そのほかのシステムでは意味は規定されず、timeが返す数値はos.dateos.difftimeへの引数としてのみ使用できます。

テーブルを指定して呼び出した場合、os.timeは関数os.dateに記載されたすべてのフィールドも正規化します。これにより、呼び出し前と同じ時刻を表しながら、値が有効範囲内に収まります。


os.tmpname ()

一時ファイルに使用できるファイル名を持つ文字列を返します。ファイルは使用前に明示的に開き、不要になったら明示的に削除する必要があります。

POSIXシステムでは、セキュリティ上のリスクを避けるため、この関数はその名前のファイルも作成します。(名前を取得してからファイルを作成するまでの間に、ほかの誰かが不適切な権限でファイルを作成する可能性があるためです。)使用するにはファイルを開き、(使用しない場合でも)削除する必要があります。

可能であれば、プログラム終了時にファイルを自動的に削除するio.tmpfileを使用する方がよいでしょう。