本文整理汇总了Golang中github.com/jacobsa/fuse/fuseops.ReadDirOp类的典型用法代码示例。如果您正苦于以下问题:Golang ReadDirOp类的具体用法?Golang ReadDirOp怎么用?Golang ReadDirOp使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ReadDirOp类的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: ReadDir
func (fs *helloFS) ReadDir(
op *fuseops.ReadDirOp) (err error) {
// Find the info for this inode.
info, ok := gInodeInfo[op.Inode]
if !ok {
err = fuse.ENOENT
return
}
if !info.dir {
err = fuse.EIO
return
}
entries := info.children
// Grab the range of interest.
if op.Offset > fuseops.DirOffset(len(entries)) {
err = fuse.EIO
return
}
entries = entries[op.Offset:]
// Resume at the specified offset into the array.
for _, e := range entries {
op.Data = fuseutil.AppendDirent(op.Data, e)
if len(op.Data) > op.Size {
op.Data = op.Data[:op.Size]
break
}
}
return
}
开发者ID:BanzaiMan,项目名称:gcsfuse,代码行数:35,代码来源:hello_fs.go
示例2: ReadDir
// ReadDir reads entries in a specific directory.
//
// Required for fuse.FileSystem.
func (k *KodingNetworkFS) ReadDir(ctx context.Context, op *fuseops.ReadDirOp) error {
dir, err := k.getDir(ctx, op.Inode)
if err != nil {
return err
}
entries, err := dir.ReadEntries(op.Offset)
if err != nil {
return err
}
var bytesRead int
for _, e := range entries {
c := fuseutil.WriteDirent(op.Dst[bytesRead:], *e)
if c == 0 {
break
}
bytesRead += c
}
op.BytesRead = bytesRead
return nil
}
开发者ID:koding,项目名称:koding,代码行数:28,代码来源:kodingnetworkfs.go
示例3: ReadDir
func (fs *flushFS) ReadDir(
op *fuseops.ReadDirOp) (err error) {
fs.mu.Lock()
defer fs.mu.Unlock()
// Create the appropriate listing.
var dirents []fuseutil.Dirent
switch op.Inode {
case fuseops.RootInodeID:
dirents = []fuseutil.Dirent{
fuseutil.Dirent{
Offset: 1,
Inode: fooID,
Name: "foo",
Type: fuseutil.DT_File,
},
fuseutil.Dirent{
Offset: 2,
Inode: barID,
Name: "bar",
Type: fuseutil.DT_Directory,
},
}
case barID:
default:
err = fmt.Errorf("Unexpected inode: %v", op.Inode)
return
}
// If the offset is for the end of the listing, we're done. Otherwise we
// expect it to be for the start.
switch op.Offset {
case fuseops.DirOffset(len(dirents)):
return
case 0:
default:
err = fmt.Errorf("Unexpected offset: %v", op.Offset)
return
}
// Fill in the listing.
for _, de := range dirents {
op.Data = fuseutil.AppendDirent(op.Data, de)
}
// We don't support doing this in anything more than one shot.
if len(op.Data) > op.Size {
err = fmt.Errorf("Couldn't fit listing in %v bytes", op.Size)
return
}
return
}
开发者ID:BanzaiMan,项目名称:gcsfuse,代码行数:59,代码来源:flush_fs.go
示例4: ReadDir
func (fs *memFS) ReadDir(
op *fuseops.ReadDirOp) (err error) {
fs.mu.Lock()
defer fs.mu.Unlock()
// Grab the directory.
inode := fs.getInodeOrDie(op.Inode)
// Serve the request.
op.Data = inode.ReadDir(int(op.Offset), op.Size)
return
}
开发者ID:BanzaiMan,项目名称:gcsfuse,代码行数:13,代码来源:memfs.go
示例5: ReadDir
// Handle a request to read from the directory, without responding.
//
// Special case: we assume that a zero offset indicates that rewinddir has been
// called (since fuse gives us no way to intercept and know for sure), and
// start the listing process over again.
//
// LOCKS_REQUIRED(dh.Mu)
// LOCKS_EXCLUDED(du.in)
func (dh *dirHandle) ReadDir(
op *fuseops.ReadDirOp) (err error) {
// If the request is for offset zero, we assume that either this is the first
// call or rewinddir has been called. Reset state.
if op.Offset == 0 {
dh.entries = nil
dh.entriesValid = false
}
// Do we need to read entries from GCS?
if !dh.entriesValid {
err = dh.ensureEntries(op.Context())
if err != nil {
return
}
}
// Is the offset past the end of what we have buffered? If so, this must be
// an invalid seekdir according to posix.
index := int(op.Offset)
if index > len(dh.entries) {
err = fuse.EINVAL
return
}
// We copy out entries until we run out of entries or space.
for i := index; i < len(dh.entries); i++ {
op.Data = fuseutil.AppendDirent(op.Data, dh.entries[i])
if len(op.Data) > op.Size {
op.Data = op.Data[:op.Size]
break
}
}
return
}
开发者ID:mbookman,项目名称:gcsfuse,代码行数:44,代码来源:dir_handle.go
示例6: ReadDir
// LOCKS_EXCLUDED(fs.mu)
func (fs *Goofys) ReadDir(
ctx context.Context,
op *fuseops.ReadDirOp) (err error) {
// Find the handle.
fs.mu.Lock()
dh := fs.dirHandles[op.Handle]
//inode := fs.inodes[op.Inode]
fs.mu.Unlock()
if dh == nil {
panic(fmt.Sprintf("can't find dh=%v", op.Handle))
}
dh.inode.logFuse("ReadDir", op.Offset)
dh.mu.Lock()
defer dh.mu.Unlock()
for i := op.Offset; ; i++ {
e, err := dh.ReadDir(fs, i)
if err != nil {
return err
}
if e == nil {
break
}
n := fuseutil.WriteDirent(op.Dst[op.BytesRead:], *e)
if n == 0 {
break
}
dh.inode.logFuse("<-- ReadDir", e.Name, e.Offset)
op.BytesRead += n
}
return
}
开发者ID:kahing,项目名称:goofys,代码行数:41,代码来源:goofys.go
示例7: ReadDir
func (fs *helloFS) ReadDir(
ctx context.Context,
op *fuseops.ReadDirOp) (err error) {
// Find the info for this inode.
info, ok := gInodeInfo[op.Inode]
if !ok {
err = fuse.ENOENT
return
}
if !info.dir {
err = fuse.EIO
return
}
entries := info.children
// Grab the range of interest.
if op.Offset > fuseops.DirOffset(len(entries)) {
err = fuse.EIO
return
}
entries = entries[op.Offset:]
// Resume at the specified offset into the array.
for _, e := range entries {
n := fuseutil.WriteDirent(op.Dst[op.BytesRead:], e)
if n == 0 {
break
}
op.BytesRead += n
}
return
}
开发者ID:andrewgaul,项目名称:fuse,代码行数:37,代码来源:hello_fs.go
注:本文中的github.com/jacobsa/fuse/fuseops.ReadDirOp类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论