iofs.go (794B)
1 // Disk exports the file system on the disk. 2 package main 3 4 import ( 5 "flag" 6 "fmt" 7 "log" 8 "net" 9 "os" 10 11 "lib9p" 12 "lib9p/iofs" 13 ) 14 15 var dFlag = flag.Bool("D", false, "Prints chatty message to the stderr.") 16 17 func main() { 18 flag.Parse() 19 20 if flag.NArg() != 1 { 21 fmt.Fprintf(os.Stderr, "usage: %s [-D] <root>\n", os.Args[0]) 22 os.Exit(1) 23 } 24 25 listener, err := net.Listen("tcp", "127.0.0.1:5640") 26 if err != nil { 27 log.Fatalf("listen tcp: %v", err) 28 } 29 30 for { 31 conn, err := listener.Accept() 32 if err != nil { 33 log.Printf("accept connection: %v", err) 34 continue 35 } 36 dir := os.DirFS(flag.Arg(0)) 37 fsys := iofs.NewFS(dir) 38 go handle(conn, fsys) 39 } 40 } 41 42 func handle(conn net.Conn, disk *iofs.FS) { 43 srv := lib9p.NewServer(disk, 8*1024, conn, conn) 44 if *dFlag { 45 srv.Chatty() 46 } 47 srv.Serve() 48 }