"Fossies" - the Fresh Open Source Software Archive

Member "fuse-3.4.1/doc/html/fuse__lowlevel_8h_source.html" (22 Dec 2018, 102450 Bytes) of package /linux/misc/fuse-3.4.1.tar.xz:


Caution: In this restricted "Fossies" environment the current HTML page may not be correctly presentated and may have some non-functional links. You can here alternatively try to browse the pure source code or just view or download the uninterpreted raw source code. If the rendering is insufficient you may try to find and view the page on the FUSE project site itself.

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 
67  fuse_ino_t ino;
68 
82  uint64_t generation;
83 
91  struct stat attr;
92 
97  double attr_timeout;
98 
104 };
105 
114 struct fuse_ctx {
116  uid_t uid;
117 
119  gid_t gid;
120 
122  pid_t pid;
123 
125  mode_t umask;
126 };
127 
128 struct fuse_forget_data {
129  fuse_ino_t ino;
130  uint64_t nlookup;
131 };
132 
133 /* 'to_set' flags in setattr */
134 #define FUSE_SET_ATTR_MODE (1 << 0)
135 #define FUSE_SET_ATTR_UID (1 << 1)
136 #define FUSE_SET_ATTR_GID (1 << 2)
137 #define FUSE_SET_ATTR_SIZE (1 << 3)
138 #define FUSE_SET_ATTR_ATIME (1 << 4)
139 #define FUSE_SET_ATTR_MTIME (1 << 5)
140 #define FUSE_SET_ATTR_ATIME_NOW (1 << 7)
141 #define FUSE_SET_ATTR_MTIME_NOW (1 << 8)
142 #define FUSE_SET_ATTR_CTIME (1 << 10)
143 
144 /* ----------------------------------------------------------- *
145  * Request methods and replies *
146  * ----------------------------------------------------------- */
147 
192  void (*init) (void *userdata, struct fuse_conn_info *conn);
193 
205  void (*destroy) (void *userdata);
206 
218  void (*lookup) (fuse_req_t req, fuse_ino_t parent, const char *name);
219 
256  void (*forget) (fuse_req_t req, fuse_ino_t ino, uint64_t nlookup);
257 
277  void (*getattr) (fuse_req_t req, fuse_ino_t ino,
278  struct fuse_file_info *fi);
279 
308  void (*setattr) (fuse_req_t req, fuse_ino_t ino, struct stat *attr,
309  int to_set, struct fuse_file_info *fi);
310 
321  void (*readlink) (fuse_req_t req, fuse_ino_t ino);
322 
339  void (*mknod) (fuse_req_t req, fuse_ino_t parent, const char *name,
340  mode_t mode, dev_t rdev);
341 
354  void (*mkdir) (fuse_req_t req, fuse_ino_t parent, const char *name,
355  mode_t mode);
356 
372  void (*unlink) (fuse_req_t req, fuse_ino_t parent, const char *name);
373 
389  void (*rmdir) (fuse_req_t req, fuse_ino_t parent, const char *name);
390 
403  void (*symlink) (fuse_req_t req, const char *link, fuse_ino_t parent,
404  const char *name);
405 
435  void (*rename) (fuse_req_t req, fuse_ino_t parent, const char *name,
436  fuse_ino_t newparent, const char *newname,
437  unsigned int flags);
438 
451  void (*link) (fuse_req_t req, fuse_ino_t ino, fuse_ino_t newparent,
452  const char *newname);
453 
510  void (*open) (fuse_req_t req, fuse_ino_t ino,
511  struct fuse_file_info *fi);
512 
538  void (*read) (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off,
539  struct fuse_file_info *fi);
540 
567  void (*write) (fuse_req_t req, fuse_ino_t ino, const char *buf,
568  size_t size, off_t off, struct fuse_file_info *fi);
569 
604  void (*flush) (fuse_req_t req, fuse_ino_t ino,
605  struct fuse_file_info *fi);
606 
631  void (*release) (fuse_req_t req, fuse_ino_t ino,
632  struct fuse_file_info *fi);
633 
653  void (*fsync) (fuse_req_t req, fuse_ino_t ino, int datasync,
654  struct fuse_file_info *fi);
655 
677  void (*opendir) (fuse_req_t req, fuse_ino_t ino,
678  struct fuse_file_info *fi);
679 
707  void (*readdir) (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off,
708  struct fuse_file_info *fi);
709 
726  void (*releasedir) (fuse_req_t req, fuse_ino_t ino,
727  struct fuse_file_info *fi);
728 
751  void (*fsyncdir) (fuse_req_t req, fuse_ino_t ino, int datasync,
752  struct fuse_file_info *fi);
753 
764  void (*statfs) (fuse_req_t req, fuse_ino_t ino);
765 
777  void (*setxattr) (fuse_req_t req, fuse_ino_t ino, const char *name,
778  const char *value, size_t size, int flags);
779 
808  void (*getxattr) (fuse_req_t req, fuse_ino_t ino, const char *name,
809  size_t size);
810 
839  void (*listxattr) (fuse_req_t req, fuse_ino_t ino, size_t size);
840 
856  void (*removexattr) (fuse_req_t req, fuse_ino_t ino, const char *name);
857 
878  void (*access) (fuse_req_t req, fuse_ino_t ino, int mask);
879 
907  void (*create) (fuse_req_t req, fuse_ino_t parent, const char *name,
908  mode_t mode, struct fuse_file_info *fi);
909 
922  void (*getlk) (fuse_req_t req, fuse_ino_t ino,
923  struct fuse_file_info *fi, struct flock *lock);
924 
947  void (*setlk) (fuse_req_t req, fuse_ino_t ino,
948  struct fuse_file_info *fi,
949  struct flock *lock, int sleep);
950 
971  void (*bmap) (fuse_req_t req, fuse_ino_t ino, size_t blocksize,
972  uint64_t idx);
973 
999  void (*ioctl) (fuse_req_t req, fuse_ino_t ino, int cmd, void *arg,
1000  struct fuse_file_info *fi, unsigned flags,
1001  const void *in_buf, size_t in_bufsz, size_t out_bufsz);
1002 
1032  void (*poll) (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi,
1033  struct fuse_pollhandle *ph);
1034 
1062  void (*write_buf) (fuse_req_t req, fuse_ino_t ino,
1063  struct fuse_bufvec *bufv, off_t off,
1064  struct fuse_file_info *fi);
1065 
1078  void (*retrieve_reply) (fuse_req_t req, void *cookie, fuse_ino_t ino,
1079  off_t offset, struct fuse_bufvec *bufv);
1080 
1092  void (*forget_multi) (fuse_req_t req, size_t count,
1093  struct fuse_forget_data *forgets);
1094 
1110  void (*flock) (fuse_req_t req, fuse_ino_t ino,
1111  struct fuse_file_info *fi, int op);
1112 
1133  void (*fallocate) (fuse_req_t req, fuse_ino_t ino, int mode,
1134  off_t offset, off_t length, struct fuse_file_info *fi);
1135 
1161  void (*readdirplus) (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off,
1162  struct fuse_file_info *fi);
1163 
1194  void (*copy_file_range) (fuse_req_t req, fuse_ino_t ino_in,
1195  off_t off_in, struct fuse_file_info *fi_in,
1196  fuse_ino_t ino_out, off_t off_out,
1197  struct fuse_file_info *fi_out, size_t len,
1198  int flags);
1199 };
1200 
1222 int fuse_reply_err(fuse_req_t req, int err);
1223 
1234 void fuse_reply_none(fuse_req_t req);
1235 
1249 int fuse_reply_entry(fuse_req_t req, const struct fuse_entry_param *e);
1250 
1268 int fuse_reply_create(fuse_req_t req, const struct fuse_entry_param *e,
1269  const struct fuse_file_info *fi);
1270 
1282 int fuse_reply_attr(fuse_req_t req, const struct stat *attr,
1283  double attr_timeout);
1284 
1295 int fuse_reply_readlink(fuse_req_t req, const char *link);
1296 
1310 int fuse_reply_open(fuse_req_t req, const struct fuse_file_info *fi);
1311 
1322 int fuse_reply_write(fuse_req_t req, size_t count);
1323 
1335 int fuse_reply_buf(fuse_req_t req, const char *buf, size_t size);
1336 
1380 int fuse_reply_data(fuse_req_t req, struct fuse_bufvec *bufv,
1381  enum fuse_buf_copy_flags flags);
1382 
1394 int fuse_reply_iov(fuse_req_t req, const struct iovec *iov, int count);
1395 
1406 int fuse_reply_statfs(fuse_req_t req, const struct statvfs *stbuf);
1407 
1418 int fuse_reply_xattr(fuse_req_t req, size_t count);
1419 
1430 int fuse_reply_lock(fuse_req_t req, const struct flock *lock);
1431 
1442 int fuse_reply_bmap(fuse_req_t req, uint64_t idx);
1443 
1444 /* ----------------------------------------------------------- *
1445  * Filling a buffer in readdir *
1446  * ----------------------------------------------------------- */
1447 
1475 size_t fuse_add_direntry(fuse_req_t req, char *buf, size_t bufsize,
1476  const char *name, const struct stat *stbuf,
1477  off_t off);
1478 
1492 size_t fuse_add_direntry_plus(fuse_req_t req, char *buf, size_t bufsize,
1493  const char *name,
1494  const struct fuse_entry_param *e, off_t off);
1495 
1511 int fuse_reply_ioctl_retry(fuse_req_t req,
1512  const struct iovec *in_iov, size_t in_count,
1513  const struct iovec *out_iov, size_t out_count);
1514 
1526 int fuse_reply_ioctl(fuse_req_t req, int result, const void *buf, size_t size);
1527 
1539 int fuse_reply_ioctl_iov(fuse_req_t req, int result, const struct iovec *iov,
1540  int count);
1541 
1548 int fuse_reply_poll(fuse_req_t req, unsigned revents);
1549 
1550 /* ----------------------------------------------------------- *
1551  * Notification *
1552  * ----------------------------------------------------------- */
1553 
1561 int fuse_lowlevel_notify_poll(struct fuse_pollhandle *ph);
1562 
1586 int fuse_lowlevel_notify_inval_inode(struct fuse_session *se, fuse_ino_t ino,
1587  off_t off, off_t len);
1588 
1614 int fuse_lowlevel_notify_inval_entry(struct fuse_session *se, fuse_ino_t parent,
1615  const char *name, size_t namelen);
1616 
1645 int fuse_lowlevel_notify_delete(struct fuse_session *se,
1646  fuse_ino_t parent, fuse_ino_t child,
1647  const char *name, size_t namelen);
1648 
1674 int fuse_lowlevel_notify_store(struct fuse_session *se, fuse_ino_t ino,
1675  off_t offset, struct fuse_bufvec *bufv,
1676  enum fuse_buf_copy_flags flags);
1706 int fuse_lowlevel_notify_retrieve(struct fuse_session *se, fuse_ino_t ino,
1707  size_t size, off_t offset, void *cookie);
1708 
1709 
1710 /* ----------------------------------------------------------- *
1711  * Utility functions *
1712  * ----------------------------------------------------------- */
1713 
1720 void *fuse_req_userdata(fuse_req_t req);
1721 
1731 const struct fuse_ctx *fuse_req_ctx(fuse_req_t req);
1732 
1752 int fuse_req_getgroups(fuse_req_t req, int size, gid_t list[]);
1753 
1760 typedef void (*fuse_interrupt_func_t)(fuse_req_t req, void *data);
1761 
1773 void fuse_req_interrupt_func(fuse_req_t req, fuse_interrupt_func_t func,
1774  void *data);
1775 
1782 int fuse_req_interrupted(fuse_req_t req);
1783 
1784 
1785 /* ----------------------------------------------------------- *
1786  * Inquiry functions *
1787  * ----------------------------------------------------------- */
1788 
1792 void fuse_lowlevel_version(void);
1793 
1799 void fuse_lowlevel_help(void);
1800 
1804 void fuse_cmdline_help(void);
1805 
1806 /* ----------------------------------------------------------- *
1807  * Filesystem setup & teardown *
1808  * ----------------------------------------------------------- */
1809 
1810 struct fuse_cmdline_opts {
1811  int singlethread;
1812  int foreground;
1813  int debug;
1814  int nodefault_subtype;
1815  char *mountpoint;
1816  int show_version;
1817  int show_help;
1818  int clone_fd;
1819  unsigned int max_idle_threads;
1820 };
1821 
1840 int fuse_parse_cmdline(struct fuse_args *args,
1841  struct fuse_cmdline_opts *opts);
1842 
1871 struct fuse_session *fuse_session_new(struct fuse_args *args,
1872  const struct fuse_lowlevel_ops *op,
1873  size_t op_size, void *userdata);
1874 
1883 int fuse_session_mount(struct fuse_session *se, const char *mountpoint);
1884 
1907 int fuse_session_loop(struct fuse_session *se);
1908 
1920 #if FUSE_USE_VERSION < 32
1921 int fuse_session_loop_mt_31(struct fuse_session *se, int clone_fd);
1922 #define fuse_session_loop_mt(se, clone_fd) fuse_session_loop_mt_31(se, clone_fd)
1923 #else
1924 int fuse_session_loop_mt(struct fuse_session *se, struct fuse_loop_config *config);
1925 #endif
1926 
1936 void fuse_session_exit(struct fuse_session *se);
1937 
1943 void fuse_session_reset(struct fuse_session *se);
1944 
1951 int fuse_session_exited(struct fuse_session *se);
1952 
1977 void fuse_session_unmount(struct fuse_session *se);
1978 
1984 void fuse_session_destroy(struct fuse_session *se);
1985 
1986 /* ----------------------------------------------------------- *
1987  * Custom event loop support *
1988  * ----------------------------------------------------------- */
1989 
2004 int fuse_session_fd(struct fuse_session *se);
2005 
2014 void fuse_session_process_buf(struct fuse_session *se,
2015  const struct fuse_buf *buf);
2016 
2028 int fuse_session_receive_buf(struct fuse_session *se, struct fuse_buf *buf);
2029 
2030 #ifdef __cplusplus
2031 }
2032 #endif
2033 
2034 #endif /* FUSE_LOWLEVEL_H_ */
void fuse_session_destroy(struct fuse_session *se)
int fuse_reply_err(fuse_req_t req, int err)
size_t off
Definition: fuse_common.h:679
int fuse_session_receive_buf(struct fuse_session *se, struct fuse_buf *buf)
struct fuse_session * fuse_session_new(struct fuse_args *args, const struct fuse_lowlevel_ops *op, size_t op_size, void *userdata)
void fuse_session_exit(struct fuse_session *se)
int fuse_session_loop(struct fuse_session *se)
Definition: fuse_loop.c:19
int fuse_lowlevel_notify_retrieve(struct fuse_session *se, fuse_ino_t ino, size_t size, off_t offset, void *cookie)
int fuse_lowlevel_notify_delete(struct fuse_session *se, fuse_ino_t parent, fuse_ino_t child, const char *name, size_t namelen)
int fuse_reply_ioctl(fuse_req_t req, int result, const void *buf, size_t size)
void fuse_lowlevel_help(void)
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_data(fuse_req_t req, struct fuse_bufvec *bufv, enum fuse_buf_copy_flags flags)
int fuse_session_fd(struct fuse_session *se)
const struct fuse_ctx * fuse_req_ctx(fuse_req_t req)
int fuse_session_mount(struct fuse_session *se, const char *mountpoint)
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)
mode_t umask
void(* fuse_interrupt_func_t)(fuse_req_t req, void *data)
int fuse_lowlevel_notify_poll(struct fuse_pollhandle *ph)
struct fuse_req * fuse_req_t
Definition: fuse_lowlevel.h:49
struct stat attr
Definition: fuse_lowlevel.h:91
size_t fuse_add_direntry(fuse_req_t req, char *buf, size_t bufsize, const char *name, const struct stat *stbuf, off_t off)
void * fuse_req_userdata(fuse_req_t req)
int fuse_lowlevel_notify_inval_inode(struct fuse_session *se, fuse_ino_t ino, off_t off, off_t len)
int fuse_reply_bmap(fuse_req_t req, uint64_t idx)
int fuse_session_loop_mt_31(struct fuse_session *se, int clone_fd)
Definition: fuse_loop_mt.c:356
Definition: fuse_lowlevel.h:59
fuse_ino_t ino
Definition: fuse_lowlevel.h:67
int fuse_parse_cmdline(struct fuse_args *args, struct fuse_cmdline_opts *opts)
Definition: helper.c:202
int fuse_reply_xattr(fuse_req_t req, size_t count)
void fuse_cmdline_help(void)
Definition: helper.c:129
int fuse_session_exited(struct fuse_session *se)
int fuse_reply_entry(fuse_req_t req, const struct fuse_entry_param *e)
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_lock(fuse_req_t req, const struct flock *lock)
int fuse_req_interrupted(fuse_req_t req)
void fuse_session_reset(struct fuse_session *se)
void fuse_lowlevel_version(void)
int fuse_reply_ioctl_iov(fuse_req_t req, int result, const struct iovec *iov, int count)
void fuse_reply_none(fuse_req_t req)
int fuse_req_getgroups(fuse_req_t req, int size, gid_t list[])
size_t count
Definition: fuse_common.h:669
int fuse_lowlevel_notify_inval_entry(struct fuse_session *se, fuse_ino_t parent, const char *name, size_t namelen)
int fuse_reply_attr(fuse_req_t req, const struct stat *attr, double attr_timeout)
void fuse_session_unmount(struct fuse_session *se)
int fuse_reply_statfs(fuse_req_t req, const struct statvfs *stbuf)
unsigned int flush
Definition: fuse_common.h:56
uint64_t fuse_ino_t
Definition: fuse_lowlevel.h:46
void fuse_req_interrupt_func(fuse_req_t req, fuse_interrupt_func_t func, void *data)
uint64_t generation
Definition: fuse_lowlevel.h:82
int fuse_reply_create(fuse_req_t req, const struct fuse_entry_param *e, const struct fuse_file_info *fi)
int fuse_reply_write(fuse_req_t req, size_t count)
int fuse_reply_open(fuse_req_t req, const struct fuse_file_info *fi)
double entry_timeout
fuse_buf_copy_flags
Definition: fuse_common.h:579
double attr_timeout
Definition: fuse_lowlevel.h:97
int fuse_reply_iov(fuse_req_t req, const struct iovec *iov, int count)
int fuse_reply_readlink(fuse_req_t req, const char *link)
int fuse_reply_buf(fuse_req_t req, const char *buf, size_t size)
int fuse_reply_poll(fuse_req_t req, unsigned revents)
void fuse_session_process_buf(struct fuse_session *se, const struct fuse_buf *buf)