LoginSignup
18
13

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-03-22

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/ドコ/ズン/ズン/ドコ/ズン/ドコ/ズン/ズン/ズン/ズン/ドコ/キ・ヨ・シ!
18
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
13