p9 is a Golang 9P2000.L client and server originally written for gVisor. p9 supports Windows, BSD, and Linux on most Go-available architectures.
For how to start a server given a p9.Attacher
implementation, see
cmd/p9ufs.
For how to implement a p9.Attacher
and p9.File
, see as an example
staticfs, a simple static file system.
Boilerplate templates for p9.File
implementations are in
templatefs.
A test suite for server-side p9.Attacher
and p9.File
implementations is
being built at fsimpl/test.
import (
"log"
"net"
"github.com/hugelgupf/p9/p9"
)
func main() {
conn, err := net.Dial("tcp", "localhost:8000")
if err != nil {
log.Fatal(err)
}
// conn can be any net.Conn.
client, err := p9.NewClient(conn)
if err != nil {
log.Fatal(err)
}
// root will be a p9.File and supports all those operations.
root, err := client.Attach("/")
if err != nil {
log.Fatal(err)
}
// For example:
_, _, attrs, err := root.GetAttr(p9.AttrMaskAll)
if err != nil {
log.Fatal(err)
}
log.Printf("Attrs of /: %v", attrs)
}