chrislu
3 years ago
1 changed files with 217 additions and 0 deletions
@ -0,0 +1,217 @@ |
|||
package mount |
|||
|
|||
import ( |
|||
"github.com/hanwen/go-fuse/v2/fuse" |
|||
) |
|||
|
|||
/** |
|||
* Read data |
|||
* |
|||
* Read should send exactly the number of bytes requested except |
|||
* on EOF or error, otherwise the rest of the data will be |
|||
* substituted with zeroes. An exception to this is when the file |
|||
* has been opened in 'direct_io' mode, in which case the return |
|||
* value of the read system call will reflect the return value of |
|||
* this operation. |
|||
* |
|||
* fi->fh will contain the value set by the open method, or will |
|||
* be undefined if the open method didn't set any value. |
|||
* |
|||
* Valid replies: |
|||
* fuse_reply_buf |
|||
* fuse_reply_iov |
|||
* fuse_reply_data |
|||
* fuse_reply_err |
|||
* |
|||
* @param req request handle |
|||
* @param ino the inode number |
|||
* @param size number of bytes to read |
|||
* @param off offset to read from |
|||
* @param fi file information |
|||
*/ |
|||
func (wfs *WFS) Read(cancel <-chan struct{}, in *fuse.ReadIn, buf []byte) (fuse.ReadResult, fuse.Status) { |
|||
return nil, fuse.ENOSYS |
|||
} |
|||
|
|||
/** |
|||
* Write data |
|||
* |
|||
* Write should return exactly the number of bytes requested |
|||
* except on error. An exception to this is when the file has |
|||
* been opened in 'direct_io' mode, in which case the return value |
|||
* of the write system call will reflect the return value of this |
|||
* operation. |
|||
* |
|||
* Unless FUSE_CAP_HANDLE_KILLPRIV is disabled, this method is |
|||
* expected to reset the setuid and setgid bits. |
|||
* |
|||
* fi->fh will contain the value set by the open method, or will |
|||
* be undefined if the open method didn't set any value. |
|||
* |
|||
* Valid replies: |
|||
* fuse_reply_write |
|||
* fuse_reply_err |
|||
* |
|||
* @param req request handle |
|||
* @param ino the inode number |
|||
* @param buf data to write |
|||
* @param size number of bytes to write |
|||
* @param off offset to write to |
|||
* @param fi file information |
|||
*/ |
|||
func (wfs *WFS) Write(cancel <-chan struct{}, in *fuse.WriteIn, data []byte) (written uint32, code fuse.Status) { |
|||
return 0, fuse.ENOSYS |
|||
} |
|||
|
|||
/** |
|||
* Open a file |
|||
* |
|||
* Open flags are available in fi->flags. The following rules |
|||
* apply. |
|||
* |
|||
* - Creation (O_CREAT, O_EXCL, O_NOCTTY) flags will be |
|||
* filtered out / handled by the kernel. |
|||
* |
|||
* - Access modes (O_RDONLY, O_WRONLY, O_RDWR) should be used |
|||
* by the filesystem to check if the operation is |
|||
* permitted. If the ``-o default_permissions`` mount |
|||
* option is given, this check is already done by the |
|||
* kernel before calling open() and may thus be omitted by |
|||
* the filesystem. |
|||
* |
|||
* - When writeback caching is enabled, the kernel may send |
|||
* read requests even for files opened with O_WRONLY. The |
|||
* filesystem should be prepared to handle this. |
|||
* |
|||
* - When writeback caching is disabled, the filesystem is |
|||
* expected to properly handle the O_APPEND flag and ensure |
|||
* that each write is appending to the end of the file. |
|||
* |
|||
* - When writeback caching is enabled, the kernel will |
|||
* handle O_APPEND. However, unless all changes to the file |
|||
* come through the kernel this will not work reliably. The |
|||
* filesystem should thus either ignore the O_APPEND flag |
|||
* (and let the kernel handle it), or return an error |
|||
* (indicating that reliably O_APPEND is not available). |
|||
* |
|||
* Filesystem may store an arbitrary file handle (pointer, |
|||
* index, etc) in fi->fh, and use this in other all other file |
|||
* operations (read, write, flush, release, fsync). |
|||
* |
|||
* Filesystem may also implement stateless file I/O and not store |
|||
* anything in fi->fh. |
|||
* |
|||
* There are also some flags (direct_io, keep_cache) which the |
|||
* filesystem may set in fi, to change the way the file is opened. |
|||
* See fuse_file_info structure in <fuse_common.h> for more details. |
|||
* |
|||
* If this request is answered with an error code of ENOSYS |
|||
* and FUSE_CAP_NO_OPEN_SUPPORT is set in |
|||
* `fuse_conn_info.capable`, this is treated as success and |
|||
* future calls to open and release will also succeed without being |
|||
* sent to the filesystem process. |
|||
* |
|||
* Valid replies: |
|||
* fuse_reply_open |
|||
* fuse_reply_err |
|||
* |
|||
* @param req request handle |
|||
* @param ino the inode number |
|||
* @param fi file information |
|||
*/ |
|||
func (wfs *WFS) Open(cancel <-chan struct{}, in *fuse.OpenIn, out *fuse.OpenOut) (status fuse.Status) { |
|||
return fuse.ENOSYS |
|||
} |
|||
|
|||
/** |
|||
* Flush method |
|||
* |
|||
* This is called on each close() of the opened file. |
|||
* |
|||
* Since file descriptors can be duplicated (dup, dup2, fork), for |
|||
* one open call there may be many flush calls. |
|||
* |
|||
* Filesystems shouldn't assume that flush will always be called |
|||
* after some writes, or that if will be called at all. |
|||
* |
|||
* fi->fh will contain the value set by the open method, or will |
|||
* be undefined if the open method didn't set any value. |
|||
* |
|||
* NOTE: the name of the method is misleading, since (unlike |
|||
* fsync) the filesystem is not forced to flush pending writes. |
|||
* One reason to flush data is if the filesystem wants to return |
|||
* write errors during close. However, such use is non-portable |
|||
* because POSIX does not require [close] to wait for delayed I/O to |
|||
* complete. |
|||
* |
|||
* If the filesystem supports file locking operations (setlk, |
|||
* getlk) it should remove all locks belonging to 'fi->owner'. |
|||
* |
|||
* If this request is answered with an error code of ENOSYS, |
|||
* this is treated as success and future calls to flush() will |
|||
* succeed automatically without being send to the filesystem |
|||
* process. |
|||
* |
|||
* Valid replies: |
|||
* fuse_reply_err |
|||
* |
|||
* @param req request handle |
|||
* @param ino the inode number |
|||
* @param fi file information |
|||
* |
|||
* [close]: http://pubs.opengroup.org/onlinepubs/9699919799/functions/close.html
|
|||
*/ |
|||
func (wfs *WFS) Flush(cancel <-chan struct{}, in *fuse.FlushIn) fuse.Status { |
|||
return fuse.ENOSYS |
|||
} |
|||
|
|||
/** |
|||
* Release an open file |
|||
* |
|||
* Release is called when there are no more references to an open |
|||
* file: all file descriptors are closed and all memory mappings |
|||
* are unmapped. |
|||
* |
|||
* For every open call there will be exactly one release call (unless |
|||
* the filesystem is force-unmounted). |
|||
* |
|||
* The filesystem may reply with an error, but error values are |
|||
* not returned to close() or munmap() which triggered the |
|||
* release. |
|||
* |
|||
* fi->fh will contain the value set by the open method, or will |
|||
* be undefined if the open method didn't set any value. |
|||
* fi->flags will contain the same flags as for open. |
|||
* |
|||
* Valid replies: |
|||
* fuse_reply_err |
|||
* |
|||
* @param req request handle |
|||
* @param ino the inode number |
|||
* @param fi file information |
|||
*/ |
|||
func (wfs *WFS) Release(cancel <-chan struct{}, in *fuse.ReleaseIn) { |
|||
} |
|||
|
|||
/** |
|||
* Synchronize file contents |
|||
* |
|||
* If the datasync parameter is non-zero, then only the user data |
|||
* should be flushed, not the meta data. |
|||
* |
|||
* If this request is answered with an error code of ENOSYS, |
|||
* this is treated as success and future calls to fsync() will |
|||
* succeed automatically without being send to the filesystem |
|||
* process. |
|||
* |
|||
* Valid replies: |
|||
* fuse_reply_err |
|||
* |
|||
* @param req request handle |
|||
* @param ino the inode number |
|||
* @param datasync flag indicating if only data should be flushed |
|||
* @param fi file information |
|||
*/ |
|||
func (wfs *WFS) Fsync(cancel <-chan struct{}, in *fuse.FsyncIn) (code fuse.Status) { |
|||
return fuse.ENOSYS |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue