第十一章 系統接口
=================
一個有用的Scheme程序經常需要與底層操作系統進行交互。
## 11.1 檢查和刪除文件
`file-exists?`會檢查它的參數字符串是否是一個文件。`delete-file`接受一個文件名字符串作為參數并刪除相應的文件。這些程序并不是Scheme標準的一部分,但是在大多數Scheme實現中都能找到它們。用這些過程操作目錄(而不是文件)并不是很可靠。(用它們操作目錄的結果與具體的Scheme實現有關。)
`file-or-directory-modify-seconds`過程接受一個文件名或目錄名為參數,并返回這個目錄或文件的最后修改時間。時間是從格林威治標準時間1970年1月1日0點開始記時的。例如:
```scheme
(file-or-directory-modify-seconds "hello.scm")
=> 893189629
```
假定`hello.scm`文件最后一次修改的時間是1998年4月21日的某個時間。
## 11.2 調用操作系統命令
`system`程序把它的參數字符串當作操作系統命令來執行 [1]。如果命令成功執行并返回0,則它會返回真,如果命令執行失敗并返回某非0值,則它會返回假。命令產生的任何輸出都會進入標準的輸出。
```scheme
(system "ls")
;lists current directory
(define fname "spot")
(system (string-append "test -f " fname))
;tests if file `spot' exists
(system (string-append "rm -f " fname))
;removes `spot'
```
最后兩個命令等價于:
```scheme
(file-exists? fname)
(delete-file fname)
```
### 11.3 環境變量
過程`getenv`返回操作系統環境變量的設定值,如:
```scheme
(getenv "HOME")
=> "/home/dorai"
(getenv "SHELL")
=> "/bin/bash"
```
------------------------------
[1] MzScheme在`process`庫中提供了`system`過程。使用`(require (lib "process.ss"))`來加載這個庫。