lib9p

Go 9P library.
Log | Files | Refs

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 }