API > OS

このページでは OS API について解説する。

参考資料:
執筆時のバージョン:
  • ComputerCraft 1.56 for Minecraft 1.6.2




OS API

Computer/Turtleのオペレーティングシステムに関するAPI。

version

assets\computercraft\lua\bios.lua で定義
  • os.version()
  • コンピュータやタートルのOSのバージョンを取得する
  • 戻り値:文字列型

computerID

dan200.computer.core.apis.OSAPI で定義
  • os.computerID()
  • コンピュータやタートルのIDを取得する
  • 戻り値:数値型

getComputerID

dan200.computer.core.apis.OSAPI で定義
  • os.getComputerID()
  • コンピュータやタートルのIDを取得する
  • 戻り値:数値型

os.computerID関数と同じ。

computerLabel

dan200.computer.core.apis.OSAPI で定義
  • os.computerLabel()
  • コンピュータやタートルのラベルを取得する
  • 戻り値:文字列型

getComputerLabel

dan200.computer.core.apis.OSAPI で定義
  • os.getComputerLabel()
  • コンピュータやタートルのラベルを取得する
  • 戻り値:文字列型

os.computerLabe関数と同じ。

setComputerLabel

dan200.computer.core.apis.OSAPI で定義
  • os.setComputerLabel( label )
  • コンピュータやタートルのラベルをlabel(文字列)に設定する
  • 戻り値:nil

pullEvent

assets\computercraft\lua\bios.lua で定義
  • os.pullEvent( [ filter ] )
  • イベントが発生するまで待ち、発生したイベントを返す。filter(文字列)にイベント名を指定すると、そのイベントが発生したときのみ返る
  • 戻り値:文字列型, ... 。一番目は発生イベント名(文字列)、その後は発生イベントごとに決まっている個数(最大5個)、型のパラメータ

内部的にはos.pullEventRaw関数を呼び出している。os.pullEventRaw関数の説明も参照。
強制中断(Ctrl+T長押し)によってterminateイベントは発生せず、プログラムは即終了する。
terminateイベントを取得し、独自の中断処理を行う場合はos.pullEventRaw関数を使う。

発生するイベントはイベント一覧を参照。

pullEventRaw

assets\computercraft\lua\bios.lua で定義
  • os.pullEventRaw( [ filter ] )
  • イベントが発生するまで待ち、発生したイベントを返す。filter(文字列)にイベント名を指定すると、そのイベントが発生したときのみ返る
  • 戻り値:文字列型, ... 。一番目は発生イベント名(文字列)、その後は発生イベントごとに特定の個数(最大5個)、型のパラメータ

「Ctrl+T長押し」で発生するterminateイベントも取得できる。その後の処理はプログラム側に任せられる。
発生するイベントはイベント一覧を参照。

内部的にはcoroutine.yield関数で実装されている。実行中のプログラムで、coroutine.yeild関数や内部でcoroutine.yeild関数を呼び出している関数が呼び出されない時間が5秒間続く(ループなど)と"Too long without yielding"となり、強制的に処理が中断される。
参考:sleep実装からイベントを学ぶ(6)-Too long without yieldingエラーの解決方法 - Minecraftとタートルと僕

+ filterを設定した場合、filterのイベント発生以前に発生した他のイベントは破棄される。
filterを設定した場合、filterのイベント発生以前に発生した他のイベントは破棄される。例えば、イベント駆動形式のスクリプトでは、イベントループ中にsleep()を入れるとイベントを取り逃す可能性がある。これは、sleep関数がos.startTimer関数とos.pullEvent("timer")関数で実装されているためで、sleep関数実行中に発生した他のイベントは破棄されてしまうからである。イベントには文字入力時のcherイベントとkeyイベントや、Rednet通信受信時のmodem_messageイベントとrednet_messageイベントのように一つの状況で複数のイベントが発生するものもあり、そのような場合に一回目のpullEvent関数の後にsleep関数や他のイベントをfilterにしたos.pullEvent関数を呼び出すと、捕捉できなかった方のイベントが破棄されてしまう。

queueEvent

dan200.computer.core.apis.OSAPI で定義
  • os.queueEvent( event , ... )
  • 任意のイベントを発生させる。event(文字列)で発生させるイベント名を指定する。2番目以降の引数でイベントのパラメータ(0~5個)を指定する
  • 戻り値:nil

clock

dan200.computer.core.apis.OSAPI で定義
  • os.clock()
  • コンピュータやタートルの稼働時間を取得する
  • 戻り値:数値型。稼働時間を表す実数(秒)

startTimer

dan200.computer.core.apis.OSAPI で定義
  • os.startTimer( timeout )
  • 実数timeout(数値)秒後にtimerイベントを発生させる
  • 戻り値:数値型。タイマーID

戻り値のタイマーIDとtimerイベント時に返るタイマーIDを比較することによって、どのタイマーによるtimerイベントなのかが判別可能。
一度timerイベントを発生させたタイマーは解除される。

sleep

assets\computercraft\lua\bios.lua で定義
  • os.sleep( timeout )
    sleep( timeout )
  • コンピュータやタートルの処理をtimeout(数値)秒間停止する
  • 戻り値:nil

プログラムを途中で一定時間停止させるのに使う。
一般に省略形である sleep( timeout ) の方が使われる。
内部的にはstartTimer関数とpullEvent関数で実装されている。そのためtimeoutに0を指定しても最低1tick(0.05秒)間は停止する。

イベントシステムを使って実装されているため、スリープ中に発生した他のイベントは破棄される。

day

dan200.computer.core.apis.OSAPI で定義
【1.48-】
  • os.day()
  • 現在のワールドのゲーム内での経過日数を取得する
  • 戻り値:数値型。ゲーム内での経過日数を表す整数(日)

time

dan200.computer.core.apis.OSAPI で定義
  • os.time()
  • Minecraftのゲーム内時間を取得する
  • 戻り値:数値型。ゲーム内時間を表す実数(時)

例:
local hour, min = math.modf( os.time() )
min = math.floor( min * 60 )
print("The time is " .. hour .. ":" .. min)
ゲーム内時刻を取得し、「時:分」の形式で表示する。
なお、「時:分」形式への変換にTextutils APIを使うと以下のようになる。
local time = os.time()
time = textutils.formatTime( time, true )
print("The time is " .. time)

setAlarm

dan200.computer.core.apis.OSAPI で定義
  • os.setAlarm( time )
  • Minecraftのゲーム時間でtime(数値)時にalarmイベントを発生させる
  • 戻り値:数値型。アラームID

戻り値のアラームIDとalarmイベント時に返るアラームIDを比較することによって、どのアラームによるalarmイベントなのかが判別可能。
一度alarmイベントを発生させたアラームは解除される。

shutdown

assets\computercraft\lua\bios.lua で定義
  • os.shutdown()
  • コンピュータやタートルをシャットダウンする
  • 戻り値:nil

reboot

assets\computercraft\lua\bios.lua で定義
  • os.reboot()
  • コンピュータやタートルを再起動する
  • 戻り値:nil

run

assets\computercraft\lua\bios.lua で定義
  • os.run( env , path , ... )
  • パスpath(文字列)のプログラム(絶対パス)を実行する。env(テーブル)でプログラムのグローバル変数の初期値を指定できる。3番目以降の引数でプログラムに渡されるパラメータを指定できる
  • 戻り値:ブーリアン型。成功したらture、失敗したらfalse

shell.run関数から内部的に呼び出されている。特に理由がなければshell.run関数を使う方が良い。

loadAPI

assets\computercraft\lua\bios.lua で定義
  • os.loadAPI( name )
  • プログラムname(文字列)をAPIに追加する。プログラムファイル名がAPI名になる
  • 戻り値:ブーリアン型。APIの追加に成功したらtrue、失敗したらfalse。

プログラムファイル内の関数に対して、プログラムファイル名.foo() のようにアクセスできるようになる。
【1.4】指定プログラムが存在せず読み込みに失敗した場合でもAPI名が登録されてしまう不具合が修正された。

unloadAPI

assets\computercraft\lua\bios.lua で定義
  • os.unloadAPI( name )
  • name(文字列)をAPIから外す
  • 戻り値:nil

イベント一覧

pullEventおよびpullEventRawで捕捉できるイベント。
戻り値 解説
1 2 3 4 5 6
"alarm" アラームID(数値) nil nil nil nil アラームの指定時刻になった
"char" 文字(文字列) nil nil nil nil 文字が入力された
"disk" 方向(文字列)
【1.51-】名前(文字列)
nil nil nil nil ドライブにアイテムがセットされた
"disk_eject" 方向(文字列)
【1.51-】名前(文字列)
nil nil nil nil ドライブからアイテムが取り出された
"http_failure" URL(文字列) nil nil nil nil HTTPリクエスト失敗
"http_success" URL(文字列) ファイルハンドル(テーブル) nil nil nil HTTPリクエスト成功
"key" キーコード(数値) nil nil nil nil キーが押された
"modem_message" 方向(文字列)
【1.51-】名前(文字列)
受信チャンネル(数値) 送信者チャンネル(数値) メッセージ(文字列) 距離(数値) 【1.5-】通信を受信した。
(受信時には常に発生)
"monitor_resize" 名前(文字列) nil nil nil nil 【1.51-】モニタのサイズが変更された
"monitor_touch" 方向(文字列)
【1.51-】名前(文字列)
タッチ位置X(数値) タッチ位置Y(数値) nil nil 【1.48-】Advanced Monitor
画面がタッチされた
"mouse_click" ボタン(数値) マウス位置X(数値) マウス位置Y(数値) nil nil 【1.45-】Advanced Computer/Turtle
GUI画面がクリックされた
"mouse_drag" ボタン(数値) マウス位置X(数値) マウス位置Y(数値) nil nil 【1.45-】Advanced Computer/Turtle
GUI画面上でドラッグされた
"mouse_scroll" スクロール方向(数値) マウス位置X(数値) マウス位置Y(数値) nil nil 【1.45-】Advanced Computer/Turtle
GUI画面上でホイールが動かされた。スクロール方向は奥・上が負、手前・下が正
"peripheral" 方向(文字列)
【1.51-】名前(文字列)
nil nil nil nil 周辺機器が設置された
"peripheral_detach" 方向(文字列)
【1.51-】名前(文字列)
nil nil nil nil 周辺機器が外された
"rednet_message" 送信者ID(数値)
【1.5-】送信者チャンネル(数値)
メッセージ(文字列) 距離(数値) nil nil 通信を受信した。
(受信チャンネル=受信者IDまたはbroadcastのときのみ発生)
"redstone" nil nil nil nil nil レッドストーン入力が変化した
"timer" タイマーID(数値) nil nil nil nil タイマーの指定時間が経過した
"turtle_inventory" nil nil nil nil nil 【1.55-】Turtle
インベントリが変化した
"turtle_response" コマンドID(数値) コマンドの成否(ブーリアン) 【1.56-】エラー内容(文字列) nil nil Turtle
カスタムコマンドが実行された

上記に加えてpullEventRawで捕捉できるイベント。
戻り値 解説
1 2 3 4 5 6
"terminate" nil nil nil nil nil Ctrl+Tが長押しされた

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2014年01月01日 17:34