libfuse
fuse_lowlevel.h
Go to the documentation of this file.
1 /*
2  FUSE: Filesystem in Userspace
3  Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
4 
5  This program can be distributed under the terms of the GNU LGPLv2.
6  See the file COPYING.LIB.
7 */
8 
9 #ifndef FUSE_LOWLEVEL_H_
10 #define FUSE_LOWLEVEL_H_
11 
21 #ifndef FUSE_USE_VERSION
22 #error FUSE_USE_VERSION not defined
23 #endif
24 
25 #include "fuse_common.h"
26 
27 #include <utime.h>
28 #include <fcntl.h>
29 #include <sys/types.h>
30 #include <sys/stat.h>
31 #include <sys/statvfs.h>
32 #include <sys/uio.h>
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
38 /* ----------------------------------------------------------- *
39  * Miscellaneous definitions *
40  * ----------------------------------------------------------- */
41 
43 #define FUSE_ROOT_ID 1
44 
46 typedef uint64_t fuse_ino_t;
47 
49 typedef struct fuse_req *fuse_req_t;
50 
56 struct fuse_session;
57 
59 struct fuse_entry_param {
68 
79  uint64_t generation;
80 
88  struct stat attr;
89 
94  double attr_timeout;
95 
100  double entry_timeout;
101 };
102 
111 struct fuse_ctx {
113  uid_t uid;
114 
116  gid_t gid;
117 
119  pid_t pid;
120 
122  mode_t umask;
123 };
124 
125 struct fuse_forget_data {
126  fuse_ino_t ino;
127  uint64_t nlookup;
128 };
129 
130 struct fuse_custom_io {
131  ssize_t (*writev)(int fd, struct iovec *iov, int count, void *userdata);
132  ssize_t (*read)(int fd, void *buf, size_t buf_len, void *userdata);
133  ssize_t (*splice_receive)(int fdin, off_t *offin, int fdout,
134  off_t *offout, size_t len,
135  unsigned int flags, void *userdata);
136  ssize_t (*splice_send)(int fdin, off_t *offin, int fdout,
137  off_t *offout, size_t len,
138  unsigned int flags, void *userdata);
139 };
140 
147  FUSE_LL_EXPIRE_ONLY = (1 << 0),
148 };
149 
150 /* 'to_set' flags in setattr */
151 #define FUSE_SET_ATTR_MODE (1 << 0)
152 #define FUSE_SET_ATTR_UID (1 << 1)
153 #define FUSE_SET_ATTR_GID (1 << 2)
154 #define FUSE_SET_ATTR_SIZE (1 << 3)
155 #define FUSE_SET_ATTR_ATIME (1 << 4)
156 #define FUSE_SET_ATTR_MTIME (1 << 5)
157 #define FUSE_SET_ATTR_ATIME_NOW (1 << 7)
158 #define FUSE_SET_ATTR_MTIME_NOW (1 << 8)
159 #define FUSE_SET_ATTR_FORCE (1 << 9)
160 #define FUSE_SET_ATTR_CTIME (1 << 10)
161 #define FUSE_SET_ATTR_KILL_SUID (1 << 11)
162 #define FUSE_SET_ATTR_KILL_SGID (1 << 12)
163 #define FUSE_SET_ATTR_FILE (1 << 13)
164 #define FUSE_SET_ATTR_KILL_PRIV (1 << 14)
165 #define FUSE_SET_ATTR_OPEN (1 << 15)
166 #define FUSE_SET_ATTR_TIMES_SET (1 << 16)
167 #define FUSE_SET_ATTR_TOUCH (1 << 17)
168 
169 /* ----------------------------------------------------------- *
170  * Request methods and replies *
171  * ----------------------------------------------------------- */
172 
200 struct fuse_lowlevel_ops {
217  void (*init) (void *userdata, struct fuse_conn_info *conn);
218 
230  void (*destroy) (void *userdata);
231 
243  void (*lookup) (fuse_req_t req, fuse_ino_t parent, const char *name);
244 
281  void (*forget) (fuse_req_t req, fuse_ino_t ino, uint64_t nlookup);
282 
302  void (*getattr) (fuse_req_t req, fuse_ino_t ino,
303  struct fuse_file_info *fi);
304 
339  void (*setattr) (fuse_req_t req, fuse_ino_t ino, struct stat *attr,
340  int to_set, struct fuse_file_info *fi);
341 
352  void (*readlink) (fuse_req_t req, fuse_ino_t ino);
353 
370  void (*mknod) (fuse_req_t req, fuse_ino_t parent, const char *name,
371  mode_t mode, dev_t rdev);
372 
385  void (*mkdir) (fuse_req_t req, fuse_ino_t parent, const char *name,
386  mode_t mode);
387 
403  void (*unlink) (fuse_req_t req, fuse_ino_t parent, const char *name);
404 
420  void (*rmdir) (fuse_req_t req, fuse_ino_t parent, const char *name);
421 
434  void (*symlink) (fuse_req_t req, const char *link, fuse_ino_t parent,
435  const char *name);
436 
466  void (*rename) (fuse_req_t req, fuse_ino_t parent, const char *name,
467  fuse_ino_t newparent, const char *newname,
468  unsigned int flags);
469 
482  void (*link) (fuse_req_t req, fuse_ino_t ino, fuse_ino_t newparent,
483  const char *newname);
484 
541  void (*open) (fuse_req_t req, fuse_ino_t ino,
542  struct fuse_file_info *fi);
543 
569  void (*read) (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off,
570  struct fuse_file_info *fi);
571 
598  void (*write) (fuse_req_t req, fuse_ino_t ino, const char *buf,
599  size_t size, off_t off, struct fuse_file_info *fi);
600 
639  void (*flush) (fuse_req_t req, fuse_ino_t ino,
640  struct fuse_file_info *fi);
641 
667  void (*release) (fuse_req_t req, fuse_ino_t ino,
668  struct fuse_file_info *fi);
669 
689  void (*fsync) (fuse_req_t req, fuse_ino_t ino, int datasync,
690  struct fuse_file_info *fi);
691 
714  void (*opendir) (fuse_req_t req, fuse_ino_t ino,
715  struct fuse_file_info *fi);
716 
760  void (*readdir) (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off,
761  struct fuse_file_info *fi);
762 
779  void (*releasedir) (fuse_req_t req, fuse_ino_t ino,
780  struct fuse_file_info *fi);
781 
804  void (*fsyncdir) (fuse_req_t req, fuse_ino_t ino, int datasync,
805  struct fuse_file_info *fi);
806 
817  void (*statfs) (fuse_req_t req, fuse_ino_t ino);
818 
830  void (*setxattr) (fuse_req_t req, fuse_ino_t ino, const char *name,
831  const char *value, size_t size, int flags);
832 
861  void (*getxattr) (fuse_req_t req, fuse_ino_t ino, const char *name,
862  size_t size);
863 
892  void (*listxattr) (fuse_req_t req, fuse_ino_t ino, size_t size);
893 
909  void (*removexattr) (fuse_req_t req, fuse_ino_t ino, const char *name);
910 
931  void (*access) (fuse_req_t req, fuse_ino_t ino, int mask);
932 
960  void (*create) (fuse_req_t req, fuse_ino_t parent, const char *name,
961  mode_t mode, struct fuse_file_info *fi);
962 
975  void (*getlk) (fuse_req_t req, fuse_ino_t ino,
976  struct fuse_file_info *fi, struct flock *lock);
977 
1000  void (*setlk) (fuse_req_t req, fuse_ino_t ino,
1001  struct fuse_file_info *fi,
1002  struct flock *lock, int sleep);
1003 
1024  void (*bmap) (fuse_req_t req, fuse_ino_t ino, size_t blocksize,
1025  uint64_t idx);
1026 
1027 #if FUSE_USE_VERSION < 35
1028  void (*ioctl) (fuse_req_t req, fuse_ino_t ino, int cmd,
1029  void *arg, struct fuse_file_info *fi, unsigned flags,
1030  const void *in_buf, size_t in_bufsz, size_t out_bufsz);
1031 #else
1060  void (*ioctl) (fuse_req_t req, fuse_ino_t ino, unsigned int cmd,
1061  void *arg, struct fuse_file_info *fi, unsigned flags,
1062  const void *in_buf, size_t in_bufsz, size_t out_bufsz);
1063 #endif
1064 
1094  void (*poll) (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi,
1095  struct fuse_pollhandle *ph);
1096 
1124  void (*write_buf) (fuse_req_t req, fuse_ino_t ino,
1125  struct fuse_bufvec *bufv, off_t off,
1126  struct fuse_file_info *fi);
1127 
1140  void (*retrieve_reply) (fuse_req_t req, void *cookie, fuse_ino_t ino,
1141  off_t offset, struct fuse_bufvec *bufv);
1142 
1154  void (*forget_multi) (fuse_req_t req, size_t count,
1155  struct fuse_forget_data *forgets);
1156 
1172  void (*flock) (fuse_req_t req, fuse_ino_t ino,
1173  struct fuse_file_info *fi, int op);
1174 
1195  void (*fallocate) (fuse_req_t req, fuse_ino_t ino, int mode,
1196  off_t offset, off_t length, struct fuse_file_info *fi);
1197 
1223  void (*readdirplus) (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off,
1224  struct fuse_file_info *fi);
1225 
1256  void (*copy_file_range) (fuse_req_t req, fuse_ino_t ino_in,
1257  off_t off_in, struct fuse_file_info *fi_in,
1258  fuse_ino_t ino_out, off_t off_out,
1259  struct fuse_file_info *fi_out, size_t len,
1260  int flags);
1261 
1280  void (*lseek) (fuse_req_t req, fuse_ino_t ino, off_t off, int whence,
1281  struct fuse_file_info *fi);
1282 };
1283 
1305 int fuse_reply_err(fuse_req_t req, int err);
1306 
1317 void fuse_reply_none(fuse_req_t req);
1318 
1332 int fuse_reply_entry(fuse_req_t req, const struct fuse_entry_param *e);
1333 
1351 int fuse_reply_create(fuse_req_t req, const struct fuse_entry_param *e,
1352  const struct fuse_file_info *fi);
1353 
1365 int fuse_reply_attr(fuse_req_t req, const struct stat *attr,
1366  double attr_timeout);
1367 
1378 int fuse_reply_readlink(fuse_req_t req, const char *link);
1379 
1393 int fuse_reply_open(fuse_req_t req, const struct fuse_file_info *fi);
1394 
1405 int fuse_reply_write(fuse_req_t req, size_t count);
1406 
1418 int fuse_reply_buf(fuse_req_t req, const char *buf, size_t size);
1419 
1463 int fuse_reply_data(fuse_req_t req, struct fuse_bufvec *bufv,
1464  enum fuse_buf_copy_flags flags);
1465 
1477 int fuse_reply_iov(fuse_req_t req, const struct iovec *iov, int count);
1478 
1489 int fuse_reply_statfs(fuse_req_t req, const struct statvfs *stbuf);
1490 
1501 int fuse_reply_xattr(fuse_req_t req, size_t count);
1502 
1513 int fuse_reply_lock(fuse_req_t req, const struct flock *lock);
1514 
1525 int fuse_reply_bmap(fuse_req_t req, uint64_t idx);
1526 
1527 /* ----------------------------------------------------------- *
1528  * Filling a buffer in readdir *
1529  * ----------------------------------------------------------- */
1530 
1558 size_t fuse_add_direntry(fuse_req_t req, char *buf, size_t bufsize,
1559  const char *name, const struct stat *stbuf,
1560  off_t off);
1561 
1575 size_t fuse_add_direntry_plus(fuse_req_t req, char *buf, size_t bufsize,
1576  const char *name,
1577  const struct fuse_entry_param *e, off_t off);
1578 
1595  const struct iovec *in_iov, size_t in_count,
1596  const struct iovec *out_iov, size_t out_count);
1597 
1609 int fuse_reply_ioctl(fuse_req_t req, int result, const void *buf, size_t size);
1610 
1622 int fuse_reply_ioctl_iov(fuse_req_t req, int result, const struct iovec *iov,
1623  int count);
1624 
1631 int fuse_reply_poll(fuse_req_t req, unsigned revents);
1632 
1643 int fuse_reply_lseek(fuse_req_t req, off_t off);
1644 
1645 /* ----------------------------------------------------------- *
1646  * Notification *
1647  * ----------------------------------------------------------- */
1648 
1656 int fuse_lowlevel_notify_poll(struct fuse_pollhandle *ph);
1657 
1681 int fuse_lowlevel_notify_inval_inode(struct fuse_session *se, fuse_ino_t ino,
1682  off_t off, off_t len);
1683 
1709 int fuse_lowlevel_notify_inval_entry(struct fuse_session *se, fuse_ino_t parent,
1710  const char *name, size_t namelen);
1711 
1739 int fuse_lowlevel_notify_expire_entry(struct fuse_session *se, fuse_ino_t parent,
1740  const char *name, size_t namelen,
1741  enum fuse_expire_flags flags);
1742 
1771 int fuse_lowlevel_notify_delete(struct fuse_session *se,
1772  fuse_ino_t parent, fuse_ino_t child,
1773  const char *name, size_t namelen);
1774 
1800 int fuse_lowlevel_notify_store(struct fuse_session *se, fuse_ino_t ino,
1801  off_t offset, struct fuse_bufvec *bufv,
1802  enum fuse_buf_copy_flags flags);
1832 int fuse_lowlevel_notify_retrieve(struct fuse_session *se, fuse_ino_t ino,
1833  size_t size, off_t offset, void *cookie);
1834 
1835 
1836 /* ----------------------------------------------------------- *
1837  * Utility functions *
1838  * ----------------------------------------------------------- */
1839 
1846 void *fuse_req_userdata(fuse_req_t req);
1847 
1857 const struct fuse_ctx *fuse_req_ctx(fuse_req_t req);
1858 
1878 int fuse_req_getgroups(fuse_req_t req, int size, gid_t list[]);
1879 
1886 typedef void (*fuse_interrupt_func_t)(fuse_req_t req, void *data);
1887 
1900  void *data);
1901 
1909 
1910 
1911 /* ----------------------------------------------------------- *
1912  * Inquiry functions *
1913  * ----------------------------------------------------------- */
1914 
1918 void fuse_lowlevel_version(void);
1919 
1925 void fuse_lowlevel_help(void);
1926 
1930 void fuse_cmdline_help(void);
1931 
1932 /* ----------------------------------------------------------- *
1933  * Filesystem setup & teardown *
1934  * ----------------------------------------------------------- */
1935 
1941 struct fuse_cmdline_opts {
1942  int singlethread;
1943  int foreground;
1944  int debug;
1945  int nodefault_subtype;
1946  char *mountpoint;
1947  int show_version;
1948  int show_help;
1949  int clone_fd;
1950  unsigned int max_idle_threads; /* discouraged, due to thread
1951  * destruct overhead */
1952 
1953  /* Added in libfuse-3.12 */
1954  unsigned int max_threads;
1955 };
1956 
1975 #if (defined(LIBFUSE_BUILT_WITH_VERSIONED_SYMBOLS))
1976 int fuse_parse_cmdline(struct fuse_args *args,
1977  struct fuse_cmdline_opts *opts);
1978 #else
1979 #if FUSE_USE_VERSION < FUSE_MAKE_VERSION(3, 12)
1980 int fuse_parse_cmdline_30(struct fuse_args *args,
1981  struct fuse_cmdline_opts *opts);
1982 #define fuse_parse_cmdline(args, opts) fuse_parse_cmdline_30(args, opts)
1983 #else
1984 int fuse_parse_cmdline_312(struct fuse_args *args,
1985  struct fuse_cmdline_opts *opts);
1986 #define fuse_parse_cmdline(args, opts) fuse_parse_cmdline_312(args, opts)
1987 #endif
1988 #endif
1989 
2018 struct fuse_session *fuse_session_new(struct fuse_args *args,
2019  const struct fuse_lowlevel_ops *op,
2020  size_t op_size, void *userdata);
2021 
2049 int fuse_session_custom_io(struct fuse_session *se,
2050  const struct fuse_custom_io *io, int fd);
2051 
2060 int fuse_session_mount(struct fuse_session *se, const char *mountpoint);
2061 
2084 int fuse_session_loop(struct fuse_session *se);
2085 
2086 #if FUSE_USE_VERSION < 32
2087  int fuse_session_loop_mt_31(struct fuse_session *se, int clone_fd);
2088  #define fuse_session_loop_mt(se, clone_fd) fuse_session_loop_mt_31(se, clone_fd)
2089 #elif FUSE_USE_VERSION < FUSE_MAKE_VERSION(3, 12)
2090  int fuse_session_loop_mt_32(struct fuse_session *se, struct fuse_loop_config *config);
2091  #define fuse_session_loop_mt(se, config) fuse_session_loop_mt_32(se, config)
2092 #else
2093  #if (defined(LIBFUSE_BUILT_WITH_VERSIONED_SYMBOLS))
2105  int fuse_session_loop_mt(struct fuse_session *se, struct fuse_loop_config *config);
2106  #else
2107  int fuse_session_loop_mt_312(struct fuse_session *se, struct fuse_loop_config *config);
2108  #define fuse_session_loop_mt(se, config) fuse_session_loop_mt_312(se, config)
2109  #endif
2110 #endif
2111 
2121 void fuse_session_exit(struct fuse_session *se);
2122 
2128 void fuse_session_reset(struct fuse_session *se);
2129 
2136 int fuse_session_exited(struct fuse_session *se);
2137 
2162 void fuse_session_unmount(struct fuse_session *se);
2163 
2169 void fuse_session_destroy(struct fuse_session *se);
2170 
2171 /* ----------------------------------------------------------- *
2172  * Custom event loop support *
2173  * ----------------------------------------------------------- */
2174 
2189 int fuse_session_fd(struct fuse_session *se);
2190 
2199 void fuse_session_process_buf(struct fuse_session *se,
2200  const struct fuse_buf *buf);
2201 
2213 int fuse_session_receive_buf(struct fuse_session *se, struct fuse_buf *buf);
2214 
2215 #ifdef __cplusplus
2216 }
2217 #endif
2218 
2219 #endif /* FUSE_LOWLEVEL_H_ */
fuse_buf_copy_flags
Definition: fuse_common.h:696
void fuse_session_destroy(struct fuse_session *se)
fuse_expire_flags
int fuse_reply_data(fuse_req_t req, struct fuse_bufvec *bufv, enum fuse_buf_copy_flags flags)
int fuse_reply_lock(fuse_req_t req, const struct flock *lock)
int fuse_reply_open(fuse_req_t req, const struct fuse_file_info *fi)
void fuse_session_exit(struct fuse_session *se)
void(* fuse_interrupt_func_t)(fuse_req_t req, void *data)
int fuse_reply_poll(fuse_req_t req, unsigned revents)
int fuse_reply_err(fuse_req_t req, int err)
int fuse_reply_buf(fuse_req_t req, const char *buf, size_t size)
struct fuse_req * fuse_req_t
Definition: fuse_lowlevel.h:49
size_t fuse_add_direntry_plus(fuse_req_t req, char *buf, size_t bufsize, const char *name, const struct fuse_entry_param *e, off_t off)
int fuse_reply_ioctl_iov(fuse_req_t req, int result, const struct iovec *iov, int count)
int fuse_lowlevel_notify_delete(struct fuse_session *se, fuse_ino_t parent, fuse_ino_t child, const char *name, size_t namelen)
void fuse_session_process_buf(struct fuse_session *se, const struct fuse_buf *buf)
int fuse_session_exited(struct fuse_session *se)
int fuse_session_fd(struct fuse_session *se)
int fuse_req_interrupted(fuse_req_t req)
int fuse_req_getgroups(fuse_req_t req, int size, gid_t list[])
int fuse_lowlevel_notify_retrieve(struct fuse_session *se, fuse_ino_t ino, size_t size, off_t offset, void *cookie)
int fuse_reply_readlink(fuse_req_t req, const char *link)
int fuse_session_loop(struct fuse_session *se)
Definition: fuse_loop.c:19
int fuse_reply_iov(fuse_req_t req, const struct iovec *iov, int count)
int fuse_reply_bmap(fuse_req_t req, uint64_t idx)
int fuse_reply_entry(fuse_req_t req, const struct fuse_entry_param *e)
void fuse_session_unmount(struct fuse_session *se)
void fuse_cmdline_help(void)
Definition: helper.c:130
void fuse_reply_none(fuse_req_t req)
int fuse_reply_ioctl_retry(fuse_req_t req, const struct iovec *in_iov, size_t in_count, const struct iovec *out_iov, size_t out_count)
void fuse_lowlevel_help(void)
int fuse_lowlevel_notify_inval_inode(struct fuse_session *se, fuse_ino_t ino, off_t off, off_t len)
struct fuse_session * fuse_session_new(struct fuse_args *args, const struct fuse_lowlevel_ops *op, size_t op_size, void *userdata)
int fuse_reply_statfs(fuse_req_t req, const struct statvfs *stbuf)
int fuse_reply_write(fuse_req_t req, size_t count)
int fuse_session_receive_buf(struct fuse_session *se, struct fuse_buf *buf)
int fuse_session_mount(struct fuse_session *se, const char *mountpoint)
int fuse_parse_cmdline_30(struct fuse_args *args, struct fuse_cmdline_opts *opts)
Definition: helper.c:237
void * fuse_req_userdata(fuse_req_t req)
int fuse_lowlevel_notify_expire_entry(struct fuse_session *se, fuse_ino_t parent, const char *name, size_t namelen, enum fuse_expire_flags flags)
int fuse_lowlevel_notify_poll(struct fuse_pollhandle *ph)
int fuse_lowlevel_notify_inval_entry(struct fuse_session *se, fuse_ino_t parent, const char *name, size_t namelen)
void fuse_req_interrupt_func(fuse_req_t req, fuse_interrupt_func_t func, void *data)
void fuse_session_reset(struct fuse_session *se)
int fuse_session_custom_io(struct fuse_session *se, const struct fuse_custom_io *io, int fd)
int fuse_reply_create(fuse_req_t req, const struct fuse_entry_param *e, const struct fuse_file_info *fi)
int fuse_reply_lseek(fuse_req_t req, off_t off)
void fuse_lowlevel_version(void)
uint64_t fuse_ino_t
Definition: fuse_lowlevel.h:46
size_t fuse_add_direntry(fuse_req_t req, char *buf, size_t bufsize, const char *name, const struct stat *stbuf, off_t off)
const struct fuse_ctx * fuse_req_ctx(fuse_req_t req)
int fuse_reply_attr(fuse_req_t req, const struct stat *attr, double attr_timeout)
int fuse_reply_ioctl(fuse_req_t req, int result, const void *buf, size_t size)
int fuse_lowlevel_notify_store(struct fuse_session *se, fuse_ino_t ino, off_t offset, struct fuse_bufvec *bufv, enum fuse_buf_copy_flags flags)
int fuse_reply_xattr(fuse_req_t req, size_t count)
size_t off
Definition: fuse_common.h:796
size_t count
Definition: fuse_common.h:786
mode_t umask
Definition: fuse_lowlevel.h:59
double entry_timeout
fuse_ino_t ino
Definition: fuse_lowlevel.h:67
uint64_t generation
Definition: fuse_lowlevel.h:79
double attr_timeout
Definition: fuse_lowlevel.h:94
struct stat attr
Definition: fuse_lowlevel.h:88
void(* flock)(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi, int op)
void(* write)(fuse_req_t req, fuse_ino_t ino, const char *buf, size_t size, off_t off, struct fuse_file_info *fi)
void(* lseek)(fuse_req_t req, fuse_ino_t ino, off_t off, int whence, struct fuse_file_info *fi)
void(* listxattr)(fuse_req_t req, fuse_ino_t ino, size_t size)
void(* removexattr)(fuse_req_t req, fuse_ino_t ino, const char *name)
void(* forget_multi)(fuse_req_t req, size_t count, struct fuse_forget_data *forgets)
void(* retrieve_reply)(fuse_req_t req, void *cookie, fuse_ino_t ino, off_t offset, struct fuse_bufvec *bufv)
void(* create)(fuse_req_t req, fuse_ino_t parent, const char *name, mode_t mode, struct fuse_file_info *fi)
void(* mkdir)(fuse_req_t req, fuse_ino_t parent, const char *name, mode_t mode)
void(* symlink)(fuse_req_t req, const char *link, fuse_ino_t parent, const char *name)
void(* write_buf)(fuse_req_t req, fuse_ino_t ino, struct fuse_bufvec *bufv, off_t off, struct fuse_file_info *fi)
void(* rmdir)(fuse_req_t req, fuse_ino_t parent, const char *name)
void(* link)(fuse_req_t req, fuse_ino_t ino, fuse_ino_t newparent, const char *newname)
void(* rename)(fuse_req_t req, fuse_ino_t parent, const char *name, fuse_ino_t newparent, const char *newname, unsigned int flags)
void(* copy_file_range)(fuse_req_t req, fuse_ino_t ino_in, off_t off_in, struct fuse_file_info *fi_in, fuse_ino_t ino_out, off_t off_out, struct fuse_file_info *fi_out, size_t len, int flags)
void(* poll)(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi, struct fuse_pollhandle *ph)
void(* opendir)(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
void(* mknod)(fuse_req_t req, fuse_ino_t parent, const char *name, mode_t mode, dev_t rdev)
void(* fallocate)(fuse_req_t req, fuse_ino_t ino, int mode, off_t offset, off_t length, struct fuse_file_info *fi)
void(* setattr)(fuse_req_t req, fuse_ino_t ino, struct stat *attr, int to_set, struct fuse_file_info *fi)
void(* getlk)(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi, struct flock *lock)
void(* fsync)(fuse_req_t req, fuse_ino_t ino, int datasync, struct fuse_file_info *fi)
void(* destroy)(void *userdata)
void(* forget)(fuse_req_t req, fuse_ino_t ino, uint64_t nlookup)
void(* getattr)(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
void(* ioctl)(fuse_req_t req, fuse_ino_t ino, unsigned int cmd, void *arg, struct fuse_file_info *fi, unsigned flags, const void *in_buf, size_t in_bufsz, size_t out_bufsz)
void(* open)(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
void(* getxattr)(fuse_req_t req, fuse_ino_t ino, const char *name, size_t size)
void(* fsyncdir)(fuse_req_t req, fuse_ino_t ino, int datasync, struct fuse_file_info *fi)
void(* init)(void *userdata, struct fuse_conn_info *conn)
void(* read)(fuse_req_t req, fuse_ino_t ino, size_t size, off_t off, struct fuse_file_info *fi)
void(* setxattr)(fuse_req_t req, fuse_ino_t ino, const char *name, const char *value, size_t size, int flags)
void(* release)(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
void(* access)(fuse_req_t req, fuse_ino_t ino, int mask)
void(* releasedir)(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
void(* bmap)(fuse_req_t req, fuse_ino_t ino, size_t blocksize, uint64_t idx)
void(* readlink)(fuse_req_t req, fuse_ino_t ino)
void(* lookup)(fuse_req_t req, fuse_ino_t parent, const char *name)
void(* statfs)(fuse_req_t req, fuse_ino_t ino)
void(* readdir)(fuse_req_t req, fuse_ino_t ino, size_t size, off_t off, struct fuse_file_info *fi)
void(* setlk)(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi, struct flock *lock, int sleep)
void(* readdirplus)(fuse_req_t req, fuse_ino_t ino, size_t size, off_t off, struct fuse_file_info *fi)
void(* flush)(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
void(* unlink)(fuse_req_t req, fuse_ino_t parent, const char *name)