CommentsEjectコマンド工作をやってると良く光学ドライブの開閉状態を確認したくなりますよね。ならないとしたら、今すぐこの記事を読むのをやめて病院に行って下さい。※Ejectネタです。՞)☝ウィーンというわけで今回は、光学ドライブの開閉状態を確認する方法を考えてみました。前回の記事の続きです。前回はディスクのマウントの有無で光学ドライブの開閉状態確認していましたが、少しレベルアップしました。システムコールを利用する最終的な結論から言うと、現段階ではこれが一番良い方法だと思います。Linuxプログラミングに四苦八苦しながらも書いたら何とかなりました。追記]close()忘れてました。ファイルディスクリプタ開いたらしっかりclose()しませう。追記]ファイルディスクリプタ開いたはいいけどclose忘れてました。//終了するときに勝手にcloseしてくれるはずだけど一応ね。追記]ファイルディスクリプタ開いたはいいけどclose忘れてました。//終了するときに勝手にcloseしてくれるはずだけど一応ね。CDS_DISC_OK:printf("DISC_OKn");return(4);default:printf("ERROR!n");return(-1);}}コンパイルします。drive_status.c実行します。引数にはデバイスファイルを指定します。上記は一例ですので状況に応じて変更してください。TRAY_OPENが返ってきた場合はトレイが開いている状態となります。NOT_READYであればトレイが閉じている状態となるはずです。NOT_READYの違いはよく分かりません。マウントの有無?)NO_INFOMATIONの場合は、情報を取得すらできていないのでエラーとして扱ってもいいかもしれません。その辺りを含めて、都合のいいように改造して使ってみたりするといいと思います。(なお、私自身がLinuxでのプログラミングが初めてだったので私に質問されても分かりません・・・。)これを使ってPHPでAPIを書いてみます。'message'=>'Close');}echo(json_encode($ret));シンプルですね。返り値0はNO_INFOMATION(情報を取得できない)なので、一応エラーにしていますがこのへんは適宜改造してください。これで光学ドライブの状態が取得できます。便利ですね!皆さんもぜひ、使ってみて下さい。