タダノキロク

日々の考えたことの記録 主に無駄なこと

12章 VFS

詳細Linuxカーネル 12章 VFSを読む

LinuxVFSを導入することで、 いろんなファイルシステムを扱うことを可能にしている。

共通ファイルモデルの役割

VFSは共通ファイルモデルに従っている。
共通ファイルモデルで Linuxカーネルは各ファイルシステム固有の関数を呼び出し、 ソフト・アプリ側に意識をさせない役割がある。

VFSが取り扱うシステムコール

ファイルコピーのプログラムcp()を通してVFSシステムコールを確認する。
cpが以下のコードで実現できる。(正常系のみ)

nf = open("/floppy/TEST", O_RDONLY, 0);
outf = open("/tmp/test", O_WRONLY | O_CREAT | O_TRUNC, 0600); 
do {
  len = read(inf, buf, 4096);
  write(outf, buf, len); 
} while (len); 
close(outf);
close(inf);

open() システムコール

open()の実体はdo_sys_open()になる。
+getnameでファイルのパス名を読み取り +get_unused_fd_flagsで空きを作成

力尽きた・・・