statfs についての初歩的な解説

2001/9/3 修正

statfs と EOTA の SFS パーティションあるいはフロッピーディスク、ディスクイメージへのファイルの書き込み、消去、実行権限の変更やディレクトリの作成などそれ以外には EOTA と外部とのファイルのやり取りができない必要不可欠なものです (補記。2001年8月現在では状況がかなり違います。statfs は Windows と EOTA(!) へも移植されました)。Linux 上でコンパイルし、Linux 上で動作します(補記。Windows 上の Cygwin 環境でもコンパイルできました。*BSD あるいは市販 BTRON 仕様 OS の UNIX エミュレーション環境ではどうなのでしょうね)。kernel/POSIX/mkfs 以下に statfs.c の名称で存在します。同ディレクトリで

$ make

あるいは

$ make statfs

を実行すると statfs の名称で実行ファイルができます。使用するときは相対パスで指定して使ってもよいのですが、

[例]
$ ../kernel/POSIX/mkfs/statfs /dev/hda1 dir /
面倒で表示が長くなって混乱してくるので、/usr/local/bin ディレクトリへコピーするか、kernel/POSIX/mkfs ディレクトリへパスを通しておくか、自分のホームディレクトリに bin ディレクトリを作り、そこへパスを通し、statfs をコピーするなどが考えられます 。
[例]
$ ls
CVS   mk_img.sh  mkfs.sh  mkfs.h  mksfs.sh  sfsck.c  statfs.c
Makefile  mk_sfsboot.sh  mkfs.c   mksfs   sfsck statfs
$ su 
Password:
# cp statfs /usr/local/bin
# exit
$
あるいは
$ su -c "cp statfs /usr/local/bin"
Password:
[例]
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
$ PATH=~/EOTA/eota/kernel/POSIX/mkfs:/usr/local/bin:/usr/bin:/bin:
/usr/bin/X11:/usr/games; export PATH
[csh、tcsh の場合の例]

% setenv PATH ~/EOTA/eota/kernel/POSIX/mkfs:/usr/local/bin:/usr/bin
:/bin:/usr/bin/X11:/usr/games
設定ができたかどうか確かめてみます。
$ echo $PATH
/home/username/EOTA/eota/kernel/POSIX/mkfs:/usr/local/bin:/usr/bin:/bin:/usr/bin
/X11:/usr/games

できました。 上記の /home/username/EOTA の部分は例です。適当なものを入力してください。 なお、PATH の設定を間違ってしまった場合に シェル内蔵コマンド以外の /bin や /usr/bin などにあるコマンドが使えなくなり、ls や pwd も使えなくなります。その場合でも (bash の場合は) cd と echo は使えるので

$ echo *

とすると

$ ls

の代わりになります。それと、この場合の設定は logout すれば消えます (違うかも) 。ホームディレクトリにある .bashrc に、

PATH=/home/username/EOTA/eota/kernel/POSIX/mkfs:/usr/local/bin:/usr/bin:/bin:/
usr/bin/X11:/usr/games; export PATH

を記述しておけば次回ログイン時から有効になりました (この辺の説明はちょっと自信がないです。各自研究してください) 。

(補記。.bashrc に書き込んだ後に、

$ source ~/.bashrc

とすれば良いようです)

使い方の実例です。ハードディスクのパーティションの 1 つを利用する場合、フロッピーディスクのイメージファイルを利用する場合、の 2 通りを記述します。 第一引数が目的のデバイスファイル名あるいはイメージファイル名、第二引数が表示する書く消すなど、第三引数が OS 上での名称、第四引数が開発環境 (Linux) 上でのファイル名、です。

ハードディスクの場合です。/dev/hda1 で説明します。自分の環境に置き換えて読んでください。ユーザー権限で読み書きできるようにパーミッションを変更しておいた方が良いと思います。

ルートディレクトリを表示します。

$ statfs /dev/hda1 dir /

ファイルを書き込みます。

$ statfs /dev/hda1 write /foo.txt foo.txt

ユーザープログラムを書き込み、実行権限に変更します。chmod 755 としていますが、777 でも 700 でもたぶん問題ないのではないかと思います

$ statfs /dev/hda1 write /bar bar
$ statfs /dev/hda1 chmod 755 /bar

ファイルを消去します。

$ statfs /dev/hda1 rm /bar

ディレクトリを作成します。

$ statfs /dev/hda1 mkdir /tmp

ディレクトリを消去します。

$ statfs /dev/hda1 rmdir /tmp

SFS 上のファイルを Linux 側で読み取ります。ただし、この方法は私の経験上はサイズの大きめのファイルでは確実に成功するとは限らないようです。

$ statfs /dev/hda1 read k14.bfb > k14.bfb

それ以外の内蔵コマンドは理解はしていません。
続いてフロッピーイメージへの作業例です。イメージの名称を posix_fd.img としています。posix_fs.bin と同じ物です。 ルートディレクトリを表示します。

$ statfs posix_fd.img dir /

ファイルを書き込みます。

$ statfs posix_fd.img write /foo.txt foo.txt

ユーザープログラムを書き込み、実行権限に変更します。

$ statfs posix_fd.img write /bar bar
$ statfs posix_fd.img chmod 755 /bar

ファイルを消去します。

$ statfs posix_fd.img rm /bar

ディレクトリを作成します。

$ statfs posix_fd.img mkdir /tmp

ディレクトリを消去します。

$ statfs posix_fd.img rmdir /tmp

SFS 上のファイルを Linux 側で読み取ります。

$ statfs posix_fd.img read k14.bfb > k14.bfb

2000/12/17 初稿
8/17 修正
9/3 修正

[topへ][戻る]