システムインタフェース

役に立つ Scheme のプログラムは基盤となるオペレーティングシステムとの しばしば対話を必要とします。

11.1  ファイルの確認と削除

file-exists? は引数の文字列の名前のファイルが存在するかどうかを チェックします。delete-file は引数のファイルを削除します。 これらの手続きは Scheme の標準にはありませんが、ほとんどの実装で 利用可能になっています。これらの手続きはディレクトリではないファイルに 対してのみ、確実に動作します(これらのディレクトリに対する挙動は、その 実装依存です)。

file-or-directory-modify-seconds は引数のファイルあるいは ディレクトリの最終更新時刻を返します。この時刻は1970年1月1日0時からの 秒数です。たとえば、

(file-or-directory-modify-seconds "hello.scm")
=>  893189629

なら、ファイル hello.scm は1998年4月21日にさわられたことになります。

11.2  オペレーティングシステムコマンドの呼び出し

system 手続きは引数の文字列をオペレーティングシステムの コマンドとして実行します。1 これはコマンドが 終了ステータス 0 を返し成功したら、真を返し、実行に失敗あるいは 0 以外の終了ステータスであった場合には、偽を返します。2 コマンドの実行によって生成される 出力はすべて標準出力に出ます。

(system "ls") 
;現在のディレクトリの内容表示

(define fname "spot")

(system (string-append "test -f " fname)) 
;spot というファイルがあるかどうかチェック

(system (string-append "rm -f " fname)) 
;spot を強制削除

最後の2つのフォームは以下と同じです。3

(file-exists? fname)

(delete-file fname)

11.3  環境変数

getenv 手続きはオペレーティングシステムの環境変数の設定を返します。 4

(getenv "HOME")
=>  "/home/dorai"

(getenv "SHELL")
=>  "/bin/bash"


1 MzScheme は system 手続きを process ライブラリ経由で提供しています。このライブラリをロードするには (require (lib "process.ss"))を使用してください。

2 (訳注) Gauche では sys-system を使います。sys-system の返り値は、POSIX の system() の返り値の整数です。

3 (訳注) Gauche では、 delete-file ではなく sys-remove を使います。

4 (訳注) Gauche では sys-getenv を使います。