1. Qiita
  2. 投稿
  3. fuse

ファイルシステムでズンドコキヨシ

  • 16
    いいね
  • 0
    コメント

Filesystem in Userspace (FUSE) を使って以下の仕様のファイルシステムを実装します。

  • 各ディレクトリには「ズン」「ドコ」というディレクトリか、「キ・ヨ・シ!」というファイルがひとつだけある
  • 「ズン」「ドコ」のディレクトリはランダムでどちらかひとつだけが出現する
  • パスが「/ズン/ズン/ズン/ズン/ドコ」なディレクトリの中には「キ・ヨ・シ!」というファイルが出現する

今回はRubyとgemのrfusefsを使って作ります。

zundoko_fs.rb
#!/usr/bin/ruby
# -*- encoding: utf-8 -*-
require 'fusefs'

class ZundokoFS < FuseFS::FuseDir

  def contents(path)
    if path =~ /\/ズン\/ズン\/ズン\/ズン\/ドコ$/ then
      [ 'キ・ヨ・シ!' ]
    else
      [ ['ズン', 'ドコ'].sample ]
    end
  end

  def directory?(path)
    path =~ /\/(ズン|ドコ)$/
  end

  def file?(path)
    path =~ /\/キ・ヨ・シ!$/
  end

end


if (File.basename($0) == File.basename(__FILE__)) then
  if ARGV.size != 1 then
    puts "Usage: #{$0} <directory>"
    exit
  end

  dirname = ARGV.shift

  unless File.directory?(dirname) then
    puts "Usage: #{dirname} is not a directory."
    exit
  end

  FuseFS.set_root(ZundokoFS.new)
  FuseFS.mount_under(dirname)

  FuseFS.run
end
実行結果
% mkdir zundoko
% sudo ./zundoko_fs.rb zundoko &
% ls -l zundoko
合計 0
dr-xr-xr-x 1 root root 0  1月  1  1970 ドコ
% ls -l zundoko
合計 0
dr-xr-xr-x 1 root root 0  1月  1  1970 ズン
% find zundoko
zundoko
zundoko/ドコ
zundoko/ドコ/ズン
zundoko/ドコ/ズン/ズン
zundoko/ドコ/ズン/ズン/ドコ
zundoko/ドコ/ズン/ズン/ドコ/ズン
zundoko/ドコ/ズン/ズン/ドコ/ズン/ドコ
zundoko/ドコ/ズン/ズン/ドコ/ズン/ドコ/ズン
zundoko/ドコ/ズン/ズン/ドコ/ズン/ドコ/ズン/ズン
zundoko/ドコ/ズン/ズン/ドコ/ズン/ドコ/ズン/ズン/ズン
zundoko/ドコ/ズン/ズン/ドコ/ズン/ドコ/ズン/ズン/ズン/ズン
zundoko/ドコ/ズン/ズン/ドコ/ズン/ドコ/ズン/ズン/ズン/ズン/ドコ
zundoko/ドコ/ズン/ズン/ドコ/ズン/ドコ/ズン/ズン/ズン/ズン/ドコ/キ・ヨ・シ!
Comments Loading...