github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/fuse/swarmfs.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:43</date> 10 //</624450112919179264> 11 12 13 package fuse 14 15 import ( 16 "sync" 17 "time" 18 19 "github.com/ethereum/go-ethereum/swarm/api" 20 ) 21 22 const ( 23 Swarmfs_Version = "0.1" 24 mountTimeout = time.Second * 5 25 unmountTimeout = time.Second * 10 26 maxFuseMounts = 5 27 ) 28 29 var ( 30 swarmfs *SwarmFS //swarm文件系统singleton 31 swarmfsLock sync.Once 32 33 inode uint64 = 1 //全局索引 34 inodeLock sync.RWMutex 35 ) 36 37 type SwarmFS struct { 38 swarmApi *api.API 39 activeMounts map[string]*MountInfo 40 swarmFsLock *sync.RWMutex 41 } 42 43 func NewSwarmFS(api *api.API) *SwarmFS { 44 swarmfsLock.Do(func() { 45 swarmfs = &SwarmFS{ 46 swarmApi: api, 47 swarmFsLock: &sync.RWMutex{}, 48 activeMounts: map[string]*MountInfo{}, 49 } 50 }) 51 return swarmfs 52 53 } 54 55 //inode编号必须是唯一的,它们用于在fuse中缓存 56 func NewInode() uint64 { 57 inodeLock.Lock() 58 defer inodeLock.Unlock() 59 inode += 1 60 return inode 61 } 62