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 <stddef.h>
28#include <utime.h>
29#include <fcntl.h>
30#include <sys/types.h>
31#include <sys/stat.h>
32#include <sys/statvfs.h>
33#include <sys/uio.h>
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
39/* ----------------------------------------------------------- *
40 * Miscellaneous definitions *
41 * ----------------------------------------------------------- */
42
44#define FUSE_ROOT_ID 1
45
47typedef uint64_t fuse_ino_t;
48
50typedef struct fuse_req *fuse_req_t;
51
57struct fuse_session;
58
69
80 uint64_t generation;
81
89 struct stat attr;
90
96
102};
103
112struct fuse_ctx {
114 uid_t uid;
115
117 gid_t gid;
118
120 pid_t pid;
121
123 mode_t umask;
124};
125
126struct fuse_forget_data {
127 fuse_ino_t ino;
128 uint64_t nlookup;
129};
130
131struct fuse_custom_io {
132 ssize_t (*writev)(int fd, struct iovec *iov, int count, void *userdata);
133 ssize_t (*read)(int fd, void *buf, size_t buf_len, void *userdata);
134 ssize_t (*splice_receive)(int fdin, off_t *offin, int fdout,
135 off_t *offout, size_t len,
136 unsigned int flags, void *userdata);
137 ssize_t (*splice_send)(int fdin, off_t *offin, int fdout,
138 off_t *offout, size_t len,
139 unsigned int flags, void *userdata);
140 int (*clone_fd)(int master_fd);
141};
142
149 FUSE_LL_INVALIDATE = 0,
150 FUSE_LL_EXPIRE_ONLY = (1 << 0),
151};
152
153/* 'to_set' flags in setattr */
154#define FUSE_SET_ATTR_MODE (1 << 0)
155#define FUSE_SET_ATTR_UID (1 << 1)
156#define FUSE_SET_ATTR_GID (1 << 2)
157#define FUSE_SET_ATTR_SIZE (1 << 3)
158#define FUSE_SET_ATTR_ATIME (1 << 4)
159#define FUSE_SET_ATTR_MTIME (1 << 5)
160#define FUSE_SET_ATTR_ATIME_NOW (1 << 7)
161#define FUSE_SET_ATTR_MTIME_NOW (1 << 8)
162#define FUSE_SET_ATTR_FORCE (1 << 9)
163#define FUSE_SET_ATTR_CTIME (1 << 10)
164#define FUSE_SET_ATTR_KILL_SUID (1 << 11)
165#define FUSE_SET_ATTR_KILL_SGID (1 << 12)
166#define FUSE_SET_ATTR_FILE (1 << 13)
167#define FUSE_SET_ATTR_KILL_PRIV (1 << 14)
168#define FUSE_SET_ATTR_OPEN (1 << 15)
169#define FUSE_SET_ATTR_TIMES_SET (1 << 16)
170#define FUSE_SET_ATTR_TOUCH (1 << 17)
171
172/* ----------------------------------------------------------- *
173 * Request methods and replies *
174 * ----------------------------------------------------------- */
175
223 void (*init) (void *userdata, struct fuse_conn_info *conn);
224
236 void (*destroy) (void *userdata);
237
249 void (*lookup) (fuse_req_t req, fuse_ino_t parent, const char *name);
250
287 void (*forget) (fuse_req_t req, fuse_ino_t ino, uint64_t nlookup);
288
308 void (*getattr) (fuse_req_t req, fuse_ino_t ino,
309 struct fuse_file_info *fi);
310
345 void (*setattr) (fuse_req_t req, fuse_ino_t ino, struct stat *attr,
346 int to_set, struct fuse_file_info *fi);
347
358 void (*readlink) (fuse_req_t req, fuse_ino_t ino);
359
376 void (*mknod) (fuse_req_t req, fuse_ino_t parent, const char *name,
377 mode_t mode, dev_t rdev);
378
391 void (*mkdir) (fuse_req_t req, fuse_ino_t parent, const char *name,
392 mode_t mode);
393
409 void (*unlink) (fuse_req_t req, fuse_ino_t parent, const char *name);
410
426 void (*rmdir) (fuse_req_t req, fuse_ino_t parent, const char *name);
427
440 void (*symlink) (fuse_req_t req, const char *link, fuse_ino_t parent,
441 const char *name);
442
472 void (*rename) (fuse_req_t req, fuse_ino_t parent, const char *name,
473 fuse_ino_t newparent, const char *newname,
474 unsigned int flags);
475
488 void (*link) (fuse_req_t req, fuse_ino_t ino, fuse_ino_t newparent,
489 const char *newname);
490
554 void (*open) (fuse_req_t req, fuse_ino_t ino,
555 struct fuse_file_info *fi);
556
582 void (*read) (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off,
583 struct fuse_file_info *fi);
584
611 void (*write) (fuse_req_t req, fuse_ino_t ino, const char *buf,
612 size_t size, off_t off, struct fuse_file_info *fi);
613
652 void (*flush) (fuse_req_t req, fuse_ino_t ino,
653 struct fuse_file_info *fi);
654
680 void (*release) (fuse_req_t req, fuse_ino_t ino,
681 struct fuse_file_info *fi);
682
702 void (*fsync) (fuse_req_t req, fuse_ino_t ino, int datasync,
703 struct fuse_file_info *fi);
704
734 void (*opendir) (fuse_req_t req, fuse_ino_t ino,
735 struct fuse_file_info *fi);
736
780 void (*readdir) (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off,
781 struct fuse_file_info *fi);
782
800 struct fuse_file_info *fi);
801
824 void (*fsyncdir) (fuse_req_t req, fuse_ino_t ino, int datasync,
825 struct fuse_file_info *fi);
826
837 void (*statfs) (fuse_req_t req, fuse_ino_t ino);
838
850 void (*setxattr) (fuse_req_t req, fuse_ino_t ino, const char *name,
851 const char *value, size_t size, int flags);
852
881 void (*getxattr) (fuse_req_t req, fuse_ino_t ino, const char *name,
882 size_t size);
883
912 void (*listxattr) (fuse_req_t req, fuse_ino_t ino, size_t size);
913
929 void (*removexattr) (fuse_req_t req, fuse_ino_t ino, const char *name);
930
951 void (*access) (fuse_req_t req, fuse_ino_t ino, int mask);
952
980 void (*create) (fuse_req_t req, fuse_ino_t parent, const char *name,
981 mode_t mode, struct fuse_file_info *fi);
982
995 void (*getlk) (fuse_req_t req, fuse_ino_t ino,
996 struct fuse_file_info *fi, struct flock *lock);
997
1020 void (*setlk) (fuse_req_t req, fuse_ino_t ino,
1021 struct fuse_file_info *fi,
1022 struct flock *lock, int sleep);
1023
1044 void (*bmap) (fuse_req_t req, fuse_ino_t ino, size_t blocksize,
1045 uint64_t idx);
1046
1047#if FUSE_USE_VERSION < 35
1048 void (*ioctl) (fuse_req_t req, fuse_ino_t ino, int cmd,
1049 void *arg, struct fuse_file_info *fi, unsigned flags,
1050 const void *in_buf, size_t in_bufsz, size_t out_bufsz);
1051#else
1080 void (*ioctl) (fuse_req_t req, fuse_ino_t ino, unsigned int cmd,
1081 void *arg, struct fuse_file_info *fi, unsigned flags,
1082 const void *in_buf, size_t in_bufsz, size_t out_bufsz);
1083#endif
1084
1117 void (*poll) (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi,
1118 struct fuse_pollhandle *ph);
1119
1148 struct fuse_bufvec *bufv, off_t off,
1149 struct fuse_file_info *fi);
1150
1163 void (*retrieve_reply) (fuse_req_t req, void *cookie, fuse_ino_t ino,
1164 off_t offset, struct fuse_bufvec *bufv);
1165
1177 void (*forget_multi) (fuse_req_t req, size_t count,
1178 struct fuse_forget_data *forgets);
1179
1195 void (*flock) (fuse_req_t req, fuse_ino_t ino,
1196 struct fuse_file_info *fi, int op);
1197
1218 void (*fallocate) (fuse_req_t req, fuse_ino_t ino, int mode,
1219 off_t offset, off_t length, struct fuse_file_info *fi);
1220
1246 void (*readdirplus) (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off,
1247 struct fuse_file_info *fi);
1248
1280 off_t off_in, struct fuse_file_info *fi_in,
1281 fuse_ino_t ino_out, off_t off_out,
1282 struct fuse_file_info *fi_out, size_t len,
1283 int flags);
1284
1303 void (*lseek) (fuse_req_t req, fuse_ino_t ino, off_t off, int whence,
1304 struct fuse_file_info *fi);
1305
1306
1325 void (*tmpfile) (fuse_req_t req, fuse_ino_t parent,
1326 mode_t mode, struct fuse_file_info *fi);
1327
1328};
1329
1351int fuse_reply_err(fuse_req_t req, int err);
1352
1363void fuse_reply_none(fuse_req_t req);
1364
1378int fuse_reply_entry(fuse_req_t req, const struct fuse_entry_param *e);
1379
1398int fuse_reply_create(fuse_req_t req, const struct fuse_entry_param *e,
1399 const struct fuse_file_info *fi);
1400
1412int fuse_reply_attr(fuse_req_t req, const struct stat *attr,
1413 double attr_timeout);
1414
1425int fuse_reply_readlink(fuse_req_t req, const char *link);
1426
1437int fuse_passthrough_open(fuse_req_t req, int fd);
1438int fuse_passthrough_close(fuse_req_t req, int backing_id);
1439
1454int fuse_reply_open(fuse_req_t req, const struct fuse_file_info *fi);
1455
1466int fuse_reply_write(fuse_req_t req, size_t count);
1467
1479int fuse_reply_buf(fuse_req_t req, const char *buf, size_t size);
1480
1524int fuse_reply_data(fuse_req_t req, struct fuse_bufvec *bufv,
1526
1538int fuse_reply_iov(fuse_req_t req, const struct iovec *iov, int count);
1539
1550int fuse_reply_statfs(fuse_req_t req, const struct statvfs *stbuf);
1551
1562int fuse_reply_xattr(fuse_req_t req, size_t count);
1563
1574int fuse_reply_lock(fuse_req_t req, const struct flock *lock);
1575
1586int fuse_reply_bmap(fuse_req_t req, uint64_t idx);
1587
1588/* ----------------------------------------------------------- *
1589 * Filling a buffer in readdir *
1590 * ----------------------------------------------------------- */
1591
1619size_t fuse_add_direntry(fuse_req_t req, char *buf, size_t bufsize,
1620 const char *name, const struct stat *stbuf,
1621 off_t off);
1622
1636size_t fuse_add_direntry_plus(fuse_req_t req, char *buf, size_t bufsize,
1637 const char *name,
1638 const struct fuse_entry_param *e, off_t off);
1639
1656 const struct iovec *in_iov, size_t in_count,
1657 const struct iovec *out_iov, size_t out_count);
1658
1670int fuse_reply_ioctl(fuse_req_t req, int result, const void *buf, size_t size);
1671
1683int fuse_reply_ioctl_iov(fuse_req_t req, int result, const struct iovec *iov,
1684 int count);
1685
1692int fuse_reply_poll(fuse_req_t req, unsigned revents);
1693
1704int fuse_reply_lseek(fuse_req_t req, off_t off);
1705
1706/* ----------------------------------------------------------- *
1707 * Notification *
1708 * ----------------------------------------------------------- */
1709
1717int fuse_lowlevel_notify_poll(struct fuse_pollhandle *ph);
1718
1742int fuse_lowlevel_notify_inval_inode(struct fuse_session *se, fuse_ino_t ino,
1743 off_t off, off_t len);
1744
1769int fuse_lowlevel_notify_inval_entry(struct fuse_session *se, fuse_ino_t parent,
1770 const char *name, size_t namelen);
1771
1800int fuse_lowlevel_notify_expire_entry(struct fuse_session *se, fuse_ino_t parent,
1801 const char *name, size_t namelen);
1802
1831int fuse_lowlevel_notify_delete(struct fuse_session *se,
1832 fuse_ino_t parent, fuse_ino_t child,
1833 const char *name, size_t namelen);
1834
1860int fuse_lowlevel_notify_store(struct fuse_session *se, fuse_ino_t ino,
1861 off_t offset, struct fuse_bufvec *bufv,
1892int fuse_lowlevel_notify_retrieve(struct fuse_session *se, fuse_ino_t ino,
1893 size_t size, off_t offset, void *cookie);
1894
1895
1896/* ----------------------------------------------------------- *
1897 * Utility functions *
1898 * ----------------------------------------------------------- */
1899
1906void *fuse_req_userdata(fuse_req_t req);
1907
1917const struct fuse_ctx *fuse_req_ctx(fuse_req_t req);
1918
1938int fuse_req_getgroups(fuse_req_t req, int size, gid_t list[]);
1939
1946typedef void (*fuse_interrupt_func_t)(fuse_req_t req, void *data);
1947
1960 void *data);
1961
1969
1970
1971/* ----------------------------------------------------------- *
1972 * Inquiry functions *
1973 * ----------------------------------------------------------- */
1974
1978void fuse_lowlevel_version(void);
1979
1985void fuse_lowlevel_help(void);
1986
1990void fuse_cmdline_help(void);
1991
1992/* ----------------------------------------------------------- *
1993 * Filesystem setup & teardown *
1994 * ----------------------------------------------------------- */
1995
2002 int singlethread;
2003 int foreground;
2004 int debug;
2005 int nodefault_subtype;
2006 char *mountpoint;
2007 int show_version;
2008 int show_help;
2009 int clone_fd;
2010 unsigned int max_idle_threads; /* discouraged, due to thread
2011 * destruct overhead */
2012
2013 /* Added in libfuse-3.12 */
2014 unsigned int max_threads;
2015};
2016
2035#if (defined(LIBFUSE_BUILT_WITH_VERSIONED_SYMBOLS))
2036int fuse_parse_cmdline(struct fuse_args *args,
2037 struct fuse_cmdline_opts *opts);
2038#else
2039#if FUSE_USE_VERSION < FUSE_MAKE_VERSION(3, 12)
2040int fuse_parse_cmdline_30(struct fuse_args *args,
2041 struct fuse_cmdline_opts *opts);
2042#define fuse_parse_cmdline(args, opts) fuse_parse_cmdline_30(args, opts)
2043#else
2044int fuse_parse_cmdline_312(struct fuse_args *args,
2045 struct fuse_cmdline_opts *opts);
2046#define fuse_parse_cmdline(args, opts) fuse_parse_cmdline_312(args, opts)
2047#endif
2048#endif
2049
2078static inline struct fuse_session *
2079fuse_session_new_fn(struct fuse_args *args, const struct fuse_lowlevel_ops *op,
2080 size_t op_size, void *userdata)
2081{
2082 struct libfuse_version version = {
2083 .major = FUSE_MAJOR_VERSION,
2084 .minor = FUSE_MINOR_VERSION,
2085 .hotfix = FUSE_HOTFIX_VERSION,
2086 .padding = 0
2087 };
2088
2089 /* not declared globally, to restrict usage of this function */
2090 struct fuse_session *fuse_session_new_versioned(
2091 struct fuse_args *args, const struct fuse_lowlevel_ops *op,
2092 size_t op_size, struct libfuse_version *version,
2093 void *userdata);
2094
2095 return fuse_session_new_versioned(args, op, op_size, &version,
2096 userdata);
2097}
2098#define fuse_session_new(args, op, op_size, userdata) \
2099 fuse_session_new_fn(args, op, op_size, userdata)
2100
2101/*
2102 * This should mostly not be called directly, but instead the
2103 * fuse_session_custom_io() should be used.
2104 */
2105int fuse_session_custom_io_317(struct fuse_session *se,
2106 const struct fuse_custom_io *io, size_t op_size, int fd);
2107
2135#if FUSE_MAKE_VERSION(3, 17) <= FUSE_USE_VERSION
2136static inline int fuse_session_custom_io(struct fuse_session *se,
2137 const struct fuse_custom_io *io, size_t op_size, int fd)
2138{
2139 return fuse_session_custom_io_317(se, io, op_size, fd);
2140}
2141#else
2142static inline int fuse_session_custom_io(struct fuse_session *se,
2143 const struct fuse_custom_io *io, int fd)
2144{
2145 return fuse_session_custom_io_317(se, io,
2146 offsetof(struct fuse_custom_io, clone_fd), fd);
2147}
2148#endif
2149
2158int fuse_session_mount(struct fuse_session *se, const char *mountpoint);
2159
2182int fuse_session_loop(struct fuse_session *se);
2183
2184#if FUSE_USE_VERSION < 32
2185 int fuse_session_loop_mt_31(struct fuse_session *se, int clone_fd);
2186 #define fuse_session_loop_mt(se, clone_fd) fuse_session_loop_mt_31(se, clone_fd)
2187#elif FUSE_USE_VERSION < FUSE_MAKE_VERSION(3, 12)
2188 int fuse_session_loop_mt_32(struct fuse_session *se, struct fuse_loop_config *config);
2189 #define fuse_session_loop_mt(se, config) fuse_session_loop_mt_32(se, config)
2190#else
2191 #if (defined(LIBFUSE_BUILT_WITH_VERSIONED_SYMBOLS))
2203 int fuse_session_loop_mt(struct fuse_session *se, struct fuse_loop_config *config);
2204 #else
2205 int fuse_session_loop_mt_312(struct fuse_session *se, struct fuse_loop_config *config);
2206 #define fuse_session_loop_mt(se, config) fuse_session_loop_mt_312(se, config)
2207 #endif
2208#endif
2209
2222void fuse_session_exit(struct fuse_session *se);
2223
2229void fuse_session_reset(struct fuse_session *se);
2230
2237int fuse_session_exited(struct fuse_session *se);
2238
2263void fuse_session_unmount(struct fuse_session *se);
2264
2270void fuse_session_destroy(struct fuse_session *se);
2271
2272/* ----------------------------------------------------------- *
2273 * Custom event loop support *
2274 * ----------------------------------------------------------- */
2275
2290int fuse_session_fd(struct fuse_session *se);
2291
2300void fuse_session_process_buf(struct fuse_session *se,
2301 const struct fuse_buf *buf);
2302
2314int fuse_session_receive_buf(struct fuse_session *se, struct fuse_buf *buf);
2315
2316#ifdef __cplusplus
2317}
2318#endif
2319
2320#endif /* FUSE_LOWLEVEL_H_ */
fuse_buf_copy_flags
void fuse_session_destroy(struct fuse_session *se)
fuse_notify_entry_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)
const struct fuse_ctx * fuse_req_ctx(fuse_req_t req)
void * fuse_req_userdata(fuse_req_t req)
int fuse_reply_buf(fuse_req_t req, const char *buf, size_t size)
struct fuse_req * fuse_req_t
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_lowlevel_notify_expire_entry(struct fuse_session *se, fuse_ino_t parent, const char *name, size_t namelen)
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)
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
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_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
size_t fuse_add_direntry(fuse_req_t req, char *buf, size_t bufsize, const char *name, const struct stat *stbuf, off_t off)
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_passthrough_open(fuse_req_t req, int fd)
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)
struct fuse_req * fuse_req_t
uint64_t fuse_ino_t
mode_t umask
double entry_timeout
fuse_ino_t ino
uint64_t generation
double attr_timeout
struct stat attr
int32_t backing_id
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(* tmpfile)(fuse_req_t req, fuse_ino_t parent, mode_t mode, 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)