#
Chapter 11
System interface

Useful Scheme programs often need to interact with the underlying operating system.

## 11.1 Checking for and deleting files

`file-exists?` checks if its argument string names a file. `delete-file` deletes its argument file. These procedures are not part of the Scheme standard, but are available in most implementations. These procedures work reliably only for files that are not directories. (Their behavior on directories is dialect-specific.)

`file-or-directory-modify-seconds` returns the time when its argument file or directory was last modified. Time is reckoned in seconds from 12 AM GMT, 1 January 1970. Eg,

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

assuming that the file `hello.scm` was last messed with sometime on 21 April 1998.

## 11.2 Calling operating-system commands

The `system` procedure executes its argument string as an operating-system command.4 It returns true if the command executed successfully with an exit status 0, and false if it failed to execute or exited with a non-zero status. Any output generated by the command goes to standard output.

    (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'

The last two forms are equivalent to

    (file-exists? fname)

    (delete-file fname)

## 11.3 Environment variables

The `getenv` procedure returns the setting of an operating-system environment variable. Eg,

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

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

4 MzScheme provides the `system` procedure via the `process` library. Use `(require (lib "process.ss"))` to load this library.