Created
October 24, 2018 06:44
-
-
Save codeflitting/34a67bcc61afb697b33c712c8195476b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"flag" | |
"fmt" | |
"log" | |
"os" | |
"bazil.org/fuse" | |
"bazil.org/fuse/fs" | |
_ "bazil.org/fuse/fs/fstestutil" | |
"golang.org/x/net/context" | |
) | |
func usage() { | |
fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) | |
fmt.Fprintf(os.Stderr, " %s MOUNTPOINT\n", os.Args[0]) | |
flag.PrintDefaults() | |
} | |
func main() { | |
flag.Usage = usage | |
flag.Parse() | |
if flag.NArg() != 1 { | |
usage() | |
os.Exit(2) | |
} | |
mountpoint := flag.Arg(0) | |
c, err := fuse.Mount( | |
mountpoint, | |
fuse.FSName("helloworld"), | |
fuse.Subtype("hellofs"), | |
fuse.LocalVolume(), | |
fuse.VolumeName("Hello world!"), | |
) | |
if err != nil { | |
log.Fatal(err) | |
} | |
defer c.Close() | |
err = fs.Serve(c, FS{}) | |
if err != nil { | |
log.Fatal(err) | |
} | |
// check if the mount process has an error to report | |
<-c.Ready | |
if err := c.MountError; err != nil { | |
log.Fatal(err) | |
} | |
} | |
// FS implements the hello world file system. | |
type FS struct{} | |
func (FS) Root() (fs.Node, error) { | |
return Dir{}, nil | |
} | |
// Dir implements both Node and Handle for the root directory. | |
type Dir struct{} | |
func (Dir) Attr(ctx context.Context, a *fuse.Attr) error { | |
a.Inode = 1 | |
a.Mode = os.ModeDir | 0555 | |
return nil | |
} | |
func (Dir) Lookup(ctx context.Context, name string) (fs.Node, error) { | |
if name == "hello" { | |
return File{}, nil | |
} | |
return nil, fuse.ENOENT | |
} | |
var dirDirs = []fuse.Dirent{ | |
{Inode: 2, Name: "hello", Type: fuse.DT_File}, | |
} | |
func (Dir) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) { | |
return dirDirs, nil | |
} | |
// File implements both Node and Handle for the hello file. | |
type File struct{} | |
const greeting = "hello, world\n" | |
func (File) Attr(ctx context.Context, a *fuse.Attr) error { | |
a.Inode = 2 | |
a.Mode = 0444 | |
a.Size = uint64(len(greeting)) | |
return nil | |
} | |
func (File) ReadAll(ctx context.Context) ([]byte, error) { | |
return []byte(greeting), nil | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment