next up previous contents
Next: ファイル管理 Up: 入出力 Previous: 入出力の為のシステムコール

様々な装置

UNIXシステムには通常様々な装置が接続されています。それらはすべて/devと いうディレクトリにデバイススペシャルファイルとして登録されています。試 しに次をやってみましょう。

        % ls -l /dev

        -rwxr-xr-x  1 root        12739 Jul 24  1992 MAKEDEV*

        crw-rw-rw-  1 root      69,   0 Mar 31  1994 audio

        ...

        crw-r-----  1 root      17,   0 Mar 31  1994 rsd0a

        crw-r-----  1 root      17,   1 Mar 31  1994 rsd0b

        ...

        brw-r-----  1 root       7,   0 Mar 31  1994 sd0a

        brw-r-----  1 root       7,   1 Mar 31  1994 sd0b

ここでMAKEDEVは装置を追加するシェルプログラムです。それ以外のファイル は属性がcかbで始まっています。cはキャラクター型デバイス、bはブロック型 デバイスを表わします。キャラクター型デバイスは単なるバイト列の湧き口も しくは沈み口で、生(RAW)デバイスと呼ばれることもあります。オーナーの次 のファイルサイズのところに数字が二つ並べてありますが、これがUNIXの入出 力システムで装置を識別する番号です。メージャー番号とマイナー番号と呼ば れています。例えばsdというのはSCSIインターフェースにつながれたハードディ スクを表わしますが、メージャー番号7を持っています。メージャー番号には それぞれデバイスドライバーが割り当てられています。個別のディスク(正確 にはディスクのパーティション)はマイナー番号で区別されています。rsdとい う装置はsdをキャラクター型デバイスとして扱うときのために(例えばバック アップのためなど)用意されたデバイスです。良く使う装置にはst(SCSIに繋が れたテープ装置)、sr(SCSIに繋がれたCDROM)、fd(フロッピーディスク)、tty (端末)、pty(疑似端末)などがあります。特殊なものにはnullがあります。各々 man 4(HP-UXではman 7。以下同じ)で見てみましょう。(以上の名前はSUN-OSの 場合です。ULTRIXの場合はrzがSCSIディスク、tzがSCSIテープになります。 HP-UXの場合は/devの下に装置の種類ごとにサブディレクトリが用意されてい ます。/dev/dsk、/dev/f loppy、/dev/rmtなどがあります。)

このように様々な装置が繋がれているわけですから上述の入出力動作以外に 個々の装置特有の操作というものが必要になります。そのためのシステムコー ルがioctlです。ioctlシステムコールは引数にファイル記述子、リクエストコー ド、リクエストを実行するためのデータを与える構造体へのポインターを指定 します。構造体はリクエストごとに異なっています。どのような操作が出来る かはmanページのセクション4にある最後にioの文字のついた項目を調べればわ かります。ディスクに対するものであればdkioです。ソケットに対しては sockioです。磁気テープに関するものはmtioです。man 4 introで見てくださ い。例えば磁気テープを巻き戻すには

        #include        <sys/mtio.h>

        struct mtop cmd;



        cmd.mt_op = MTREW;

        cmd.mt_count = 1;

        ioctl( fd, MTIOCTOP, &cmd );

という風になります。構造体mtopは磁気テープデバイスドライバーによって解 読されるオペレーションを定義するものです。こういったやり方はデバイスド ライバーごとに違っていますのでmanページやマニュアルを調べる必要があり ます。VMEやCAMACも特殊な操作をドライバーを通して行ないます。



next up previous contents
Next: ファイル管理 Up: 入出力 Previous: 入出力の為のシステムコール



Kinya Hibino
Sun Jan 14 21:36:40 JST 1996