API > OS


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

このページでは 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のイベント発生以前に発生した他のイベントは破棄される。

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が長押しされた