You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

968 lines
45 KiB

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.8"/>
<title>fuse: include/fuse.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">fuse
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.8 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">fuse.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="fuse__common_8h.html">fuse_common.h</a>&quot;</code><br />
<code>#include &lt;fcntl.h&gt;</code><br />
<code>#include &lt;time.h&gt;</code><br />
<code>#include &lt;utime.h&gt;</code><br />
<code>#include &lt;sys/types.h&gt;</code><br />
<code>#include &lt;sys/stat.h&gt;</code><br />
<code>#include &lt;sys/statvfs.h&gt;</code><br />
<code>#include &lt;sys/uio.h&gt;</code><br />
<code>#include &quot;fuse_compat.h&quot;</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfuse__operations.html">fuse_operations</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfuse__context.html">fuse_context</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfuse__module.html">fuse_module</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:a61755930843c427b79622eda0ad8f083"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#a61755930843c427b79622eda0ad8f083">fuse_main</a>(argc, argv, op, user_data)&#160;&#160;&#160;<a class="el" href="fuse_8h.html#a2098b9d60626bf749801d12f2d0d6fd3">fuse_main_real</a>(argc, argv, op, sizeof(*(op)), user_data)</td></tr>
<tr class="separator:a61755930843c427b79622eda0ad8f083"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af335784cf29289c7583f3312d98d2bcd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#af335784cf29289c7583f3312d98d2bcd">FUSE_REGISTER_MODULE</a>(name_, factory_)</td></tr>
<tr class="separator:af335784cf29289c7583f3312d98d2bcd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad549ea7a3a1649a8b062843cecd793b6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#ad549ea7a3a1649a8b062843cecd793b6">fuse_main</a>&#160;&#160;&#160;fuse_main_compat2</td></tr>
<tr class="separator:ad549ea7a3a1649a8b062843cecd793b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ae2a2054f9852fd6020c26a1bcc7f1042"><td class="memItemLeft" align="right" valign="top">typedef int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#ae2a2054f9852fd6020c26a1bcc7f1042">fuse_fill_dir_t</a> )(void *buf, const char *name, const struct stat *stbuf, off_t off)</td></tr>
<tr class="separator:ae2a2054f9852fd6020c26a1bcc7f1042"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab27948e20743f4c153f6ba6d71ca7182"><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#ab27948e20743f4c153f6ba6d71ca7182">fuse_processor_t</a> )(struct fuse *, struct fuse_cmd *, void *)</td></tr>
<tr class="separator:ab27948e20743f4c153f6ba6d71ca7182"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a5326844946defe4a50b3f4320786a0f4"><td class="memItemLeft" align="right" valign="top">struct fuse *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#a5326844946defe4a50b3f4320786a0f4">fuse_new</a> (struct fuse_chan *ch, struct <a class="el" href="structfuse__args.html">fuse_args</a> *args, const struct <a class="el" href="structfuse__operations.html">fuse_operations</a> *op, size_t op_size, void *user_data)</td></tr>
<tr class="separator:a5326844946defe4a50b3f4320786a0f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0d47cac8a295efd5370d7af059e4d14f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#a0d47cac8a295efd5370d7af059e4d14f">fuse_destroy</a> (struct fuse *f)</td></tr>
<tr class="separator:a0d47cac8a295efd5370d7af059e4d14f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ea805c47ccc960497dfd64e12081159"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#a6ea805c47ccc960497dfd64e12081159">fuse_loop</a> (struct fuse *f)</td></tr>
<tr class="separator:a6ea805c47ccc960497dfd64e12081159"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9024935b211288c1869dc7566895d739"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#a9024935b211288c1869dc7566895d739">fuse_exit</a> (struct fuse *f)</td></tr>
<tr class="separator:a9024935b211288c1869dc7566895d739"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79387240dad1f77417fd178f4b9ef0a0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#a79387240dad1f77417fd178f4b9ef0a0">fuse_loop_mt</a> (struct fuse *f)</td></tr>
<tr class="separator:a79387240dad1f77417fd178f4b9ef0a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9a0f2a6603cb1e21f5e4c1aec84a3bcc"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structfuse__context.html">fuse_context</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#a9a0f2a6603cb1e21f5e4c1aec84a3bcc">fuse_get_context</a> (void)</td></tr>
<tr class="separator:a9a0f2a6603cb1e21f5e4c1aec84a3bcc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a04273db088e57d8242caa388193b6958"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#a04273db088e57d8242caa388193b6958">fuse_getgroups</a> (int size, gid_t list[])</td></tr>
<tr class="separator:a04273db088e57d8242caa388193b6958"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0514ca828e6a02a330dcf037292c8803"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#a0514ca828e6a02a330dcf037292c8803">fuse_interrupted</a> (void)</td></tr>
<tr class="separator:a0514ca828e6a02a330dcf037292c8803"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a390d7e520ea2be2471ffa366cbc1f37d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#a390d7e520ea2be2471ffa366cbc1f37d">fuse_invalidate</a> (struct fuse *f, const char *path)</td></tr>
<tr class="separator:a390d7e520ea2be2471ffa366cbc1f37d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2098b9d60626bf749801d12f2d0d6fd3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#a2098b9d60626bf749801d12f2d0d6fd3">fuse_main_real</a> (int argc, char *argv[], const struct <a class="el" href="structfuse__operations.html">fuse_operations</a> *op, size_t op_size, void *user_data)</td></tr>
<tr class="separator:a2098b9d60626bf749801d12f2d0d6fd3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4b2246caec521ec4ac84093f8c4b616d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#a4b2246caec521ec4ac84093f8c4b616d">fuse_start_cleanup_thread</a> (struct fuse *fuse)</td></tr>
<tr class="separator:a4b2246caec521ec4ac84093f8c4b616d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad37fd69ba40d5c261f16e207e4a5b0ed"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#ad37fd69ba40d5c261f16e207e4a5b0ed">fuse_stop_cleanup_thread</a> (struct fuse *fuse)</td></tr>
<tr class="separator:ad37fd69ba40d5c261f16e207e4a5b0ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a90f104e6d4e01480161a3300bddbecbe"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#a90f104e6d4e01480161a3300bddbecbe">fuse_clean_cache</a> (struct fuse *fuse)</td></tr>
<tr class="separator:a90f104e6d4e01480161a3300bddbecbe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad4b0e6955b2fd720542c6c3262fb8761"><td class="memItemLeft" align="right" valign="top">struct fuse_fs *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#ad4b0e6955b2fd720542c6c3262fb8761">fuse_fs_new</a> (const struct <a class="el" href="structfuse__operations.html">fuse_operations</a> *op, size_t op_size, void *user_data)</td></tr>
<tr class="separator:ad4b0e6955b2fd720542c6c3262fb8761"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad6380ea6c7cb4a4a4cf421d808ce2b66"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#ad6380ea6c7cb4a4a4cf421d808ce2b66">fuse_register_module</a> (struct <a class="el" href="structfuse__module.html">fuse_module</a> *mod)</td></tr>
<tr class="separator:ad6380ea6c7cb4a4a4cf421d808ce2b66"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab6dc1548ab6f04f048927dc09882563d"><td class="memItemLeft" align="right" valign="top">struct fuse *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#ab6dc1548ab6f04f048927dc09882563d">fuse_setup</a> (int argc, char *argv[], const struct <a class="el" href="structfuse__operations.html">fuse_operations</a> *op, size_t op_size, char **mountpoint, int *multithreaded, void *user_data)</td></tr>
<tr class="separator:ab6dc1548ab6f04f048927dc09882563d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a87c736a7e6ee86348a9fdf83f6635199"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#a87c736a7e6ee86348a9fdf83f6635199">fuse_teardown</a> (struct fuse *fuse, char *mountpoint)</td></tr>
<tr class="separator:a87c736a7e6ee86348a9fdf83f6635199"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa5aaa31ed710ea1afe9467f10d523b21"><td class="memItemLeft" align="right" valign="top">struct fuse_cmd *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#aa5aaa31ed710ea1afe9467f10d523b21">fuse_read_cmd</a> (struct fuse *f)</td></tr>
<tr class="separator:aa5aaa31ed710ea1afe9467f10d523b21"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a638b7477f87a2aca57ef0a5c4ca1d500"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#a638b7477f87a2aca57ef0a5c4ca1d500">fuse_process_cmd</a> (struct fuse *f, struct fuse_cmd *cmd)</td></tr>
<tr class="separator:a638b7477f87a2aca57ef0a5c4ca1d500"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aadced4bb8ad64e622a2d0b9e6738c97b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#aadced4bb8ad64e622a2d0b9e6738c97b">fuse_loop_mt_proc</a> (struct fuse *f, <a class="el" href="fuse_8h.html#ab27948e20743f4c153f6ba6d71ca7182">fuse_processor_t</a> proc, void *data)</td></tr>
<tr class="separator:aadced4bb8ad64e622a2d0b9e6738c97b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3035da06904362a9e924d77c2e460258"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#a3035da06904362a9e924d77c2e460258">fuse_exited</a> (struct fuse *f)</td></tr>
<tr class="separator:a3035da06904362a9e924d77c2e460258"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adbd6a1fa417b704972554ed983e67b85"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#adbd6a1fa417b704972554ed983e67b85">fuse_set_getcontext_func</a> (struct <a class="el" href="structfuse__context.html">fuse_context</a> *(*func)(void))</td></tr>
<tr class="separator:adbd6a1fa417b704972554ed983e67b85"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a03baa193b5bfcbe625afbc62e9b97e91"><td class="memItemLeft" align="right" valign="top">struct fuse_session *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fuse_8h.html#a03baa193b5bfcbe625afbc62e9b97e91">fuse_get_session</a> (struct fuse *f)</td></tr>
<tr class="separator:a03baa193b5bfcbe625afbc62e9b97e91"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>This file defines the library interface of FUSE</p>
<p>IMPORTANT: you should define FUSE_USE_VERSION before including this header. To use the newest API define it to 26 (recommended for any new application), to use the old API define it to 21 (default) 22 or 25, to use the even older 1.X API define it to 11. </p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a class="anchor" id="a61755930843c427b79622eda0ad8f083"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define fuse_main</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">argc, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">argv, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">op, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">user_data&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td>&#160;&#160;&#160;<a class="el" href="fuse_8h.html#a2098b9d60626bf749801d12f2d0d6fd3">fuse_main_real</a>(argc, argv, op, sizeof(*(op)), user_data)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Main function of FUSE.</p>
<p>This is for the lazy. This is all that has to be called from the main() function.</p>
<p>This function does the following:</p><ul>
<li>parses command line options (-d -s and -h)</li>
<li>passes relevant mount options to the <a class="el" href="fuse__common_8h.html#a30d394a6127b20455bf5a4899e56e759">fuse_mount()</a></li>
<li>installs signal handlers for INT, HUP, TERM and PIPE</li>
<li>registers an exit handler to unmount the filesystem on program exit</li>
<li>creates a fuse handle</li>
<li>registers the operations</li>
<li>calls either the single-threaded or the multi-threaded event loop</li>
</ul>
<p>Note: this is currently implemented as a macro.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">argc</td><td>the argument counter passed to the main() function </td></tr>
<tr><td class="paramname">argv</td><td>the argument vector passed to the main() function </td></tr>
<tr><td class="paramname">op</td><td>the file system operation </td></tr>
<tr><td class="paramname">user_data</td><td>user data supplied in the context during the init() method </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success, nonzero on failure </dd></dl>
</div>
</div>
<a class="anchor" id="ad549ea7a3a1649a8b062843cecd793b6"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define fuse_main&#160;&#160;&#160;fuse_main_compat2</td>
</tr>
</table>
</div><div class="memdoc">
<p>Main function of FUSE.</p>
<p>This is for the lazy. This is all that has to be called from the main() function.</p>
<p>This function does the following:</p><ul>
<li>parses command line options (-d -s and -h)</li>
<li>passes relevant mount options to the <a class="el" href="fuse__common_8h.html#a30d394a6127b20455bf5a4899e56e759">fuse_mount()</a></li>
<li>installs signal handlers for INT, HUP, TERM and PIPE</li>
<li>registers an exit handler to unmount the filesystem on program exit</li>
<li>creates a fuse handle</li>
<li>registers the operations</li>
<li>calls either the single-threaded or the multi-threaded event loop</li>
</ul>
<p>Note: this is currently implemented as a macro.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">argc</td><td>the argument counter passed to the main() function </td></tr>
<tr><td class="paramname">argv</td><td>the argument vector passed to the main() function </td></tr>
<tr><td class="paramname">op</td><td>the file system operation </td></tr>
<tr><td class="paramname">user_data</td><td>user data supplied in the context during the init() method </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success, nonzero on failure </dd></dl>
</div>
</div>
<a class="anchor" id="af335784cf29289c7583f3312d98d2bcd"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define FUSE_REGISTER_MODULE</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">name_, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">factory_&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">static</span> __attribute__((constructor)) void name_ <span class="preprocessor">## _register(void) \</span></div>
<div class="line"><span class="preprocessor"> { \</span></div>
<div class="line"><span class="preprocessor"> static struct fuse_module mod = \</span></div>
<div class="line"><span class="preprocessor"> { #name_, factory_, NULL, NULL, 0 }; \</span></div>
<div class="line"><span class="preprocessor"> fuse_register_module(&amp;mod); \</span></div>
<div class="line"><span class="preprocessor"> }</span></div>
</div><!-- fragment --><p>Register filesystem module</p>
<p>For the parameters, see description of the fields in 'struct <a class="el" href="structfuse__module.html">fuse_module</a>' </p>
</div>
</div>
<h2 class="groupheader">Typedef Documentation</h2>
<a class="anchor" id="ae2a2054f9852fd6020c26a1bcc7f1042"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int(* fuse_fill_dir_t)(void *buf, const char *name, const struct stat *stbuf, off_t off)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Function to add an entry in a readdir() operation</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">buf</td><td>the buffer passed to the readdir() operation </td></tr>
<tr><td class="paramname">name</td><td>the file name of the directory entry </td></tr>
<tr><td class="paramname">stat</td><td>file attributes, can be NULL </td></tr>
<tr><td class="paramname">off</td><td>offset of the next entry or zero </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>1 if buffer is full, zero otherwise </dd></dl>
</div>
</div>
<a class="anchor" id="ab27948e20743f4c153f6ba6d71ca7182"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef void(* fuse_processor_t)(struct fuse *, struct fuse_cmd *, void *)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Function type used to process commands </p>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="a90f104e6d4e01480161a3300bddbecbe"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int fuse_clean_cache </td>
<td>(</td>
<td class="paramtype">struct fuse *&#160;</td>
<td class="paramname"><em>fuse</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Iterate over cache removing stale entries use in conjunction with "-oremember"</p>
<p>NOTE: This is already done for the standard sessions</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">fuse</td><td>struct fuse pointer for fuse instance </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the number of seconds until the next cleanup </dd></dl>
</div>
</div>
<a class="anchor" id="a0d47cac8a295efd5370d7af059e4d14f"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void fuse_destroy </td>
<td>(</td>
<td class="paramtype">struct fuse *&#160;</td>
<td class="paramname"><em>f</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Destroy the FUSE handle.</p>
<p>The communication channel attached to the handle is also destroyed.</p>
<p>NOTE: This function does not unmount the filesystem. If this is needed, call <a class="el" href="fuse__common_8h.html#a1b6448c8529f9fac068a35ef7a279d4d">fuse_unmount()</a> before calling this function.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">f</td><td>the FUSE handle </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a9024935b211288c1869dc7566895d739"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void fuse_exit </td>
<td>(</td>
<td class="paramtype">struct fuse *&#160;</td>
<td class="paramname"><em>f</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Exit from event loop</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">f</td><td>the FUSE handle </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a3035da06904362a9e924d77c2e460258"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int fuse_exited </td>
<td>(</td>
<td class="paramtype">struct fuse *&#160;</td>
<td class="paramname"><em>f</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Return the exited flag, which indicates if <a class="el" href="fuse_8h.html#a9024935b211288c1869dc7566895d739">fuse_exit()</a> has been called </p>
</div>
</div>
<a class="anchor" id="ad4b0e6955b2fd720542c6c3262fb8761"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct fuse_fs* fuse_fs_new </td>
<td>(</td>
<td class="paramtype">const struct <a class="el" href="structfuse__operations.html">fuse_operations</a> *&#160;</td>
<td class="paramname"><em>op</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>op_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>user_data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a new fuse filesystem object</p>
<p>This is usually called from the factory of a fuse module to create a new instance of a filesystem.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">op</td><td>the filesystem operations </td></tr>
<tr><td class="paramname">op_size</td><td>the size of the <a class="el" href="structfuse__operations.html">fuse_operations</a> structure </td></tr>
<tr><td class="paramname">user_data</td><td>user data supplied in the context during the init() method </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>a new filesystem object </dd></dl>
</div>
</div>
<a class="anchor" id="a9a0f2a6603cb1e21f5e4c1aec84a3bcc"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct <a class="el" href="structfuse__context.html">fuse_context</a>* fuse_get_context </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the current context</p>
<p>The context is only valid for the duration of a filesystem operation, and thus must not be stored and used later.</p>
<dl class="section return"><dt>Returns</dt><dd>the context </dd></dl>
</div>
</div>
<a class="anchor" id="a03baa193b5bfcbe625afbc62e9b97e91"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct fuse_session* fuse_get_session </td>
<td>(</td>
<td class="paramtype">struct fuse *&#160;</td>
<td class="paramname"><em>f</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get session from fuse object </p>
</div>
</div>
<a class="anchor" id="a04273db088e57d8242caa388193b6958"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int fuse_getgroups </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">gid_t&#160;</td>
<td class="paramname"><em>list</em>[]&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the current supplementary group IDs for the current request</p>
<p>Similar to the getgroups(2) system call, except the return value is always the total number of group IDs, even if it is larger than the specified size.</p>
<p>The current fuse kernel module in linux (as of 2.6.30) doesn't pass the group list to userspace, hence this function needs to parse "/proc/$TID/task/$TID/status" to get the group IDs.</p>
<p>This feature may not be supported on all operating systems. In such a case this function will return -ENOSYS.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">size</td><td>size of given array </td></tr>
<tr><td class="paramname">list</td><td>array of group IDs to be filled in </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the total number of supplementary group IDs or -errno on failure </dd></dl>
</div>
</div>
<a class="anchor" id="a0514ca828e6a02a330dcf037292c8803"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int fuse_interrupted </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Check if the current request has already been interrupted</p>
<dl class="section return"><dt>Returns</dt><dd>1 if the request has been interrupted, 0 otherwise </dd></dl>
</div>
</div>
<a class="anchor" id="a390d7e520ea2be2471ffa366cbc1f37d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int fuse_invalidate </td>
<td>(</td>
<td class="paramtype">struct fuse *&#160;</td>
<td class="paramname"><em>f</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>path</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Obsolete, doesn't do anything</p>
<dl class="section return"><dt>Returns</dt><dd>-EINVAL </dd></dl>
</div>
</div>
<a class="anchor" id="a6ea805c47ccc960497dfd64e12081159"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int fuse_loop </td>
<td>(</td>
<td class="paramtype">struct fuse *&#160;</td>
<td class="paramname"><em>f</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>FUSE event loop.</p>
<p>Requests from the kernel are processed, and the appropriate operations are called.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">f</td><td>the FUSE handle </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if no error occurred, -1 otherwise </dd></dl>
</div>
</div>
<a class="anchor" id="a79387240dad1f77417fd178f4b9ef0a0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int fuse_loop_mt </td>
<td>(</td>
<td class="paramtype">struct fuse *&#160;</td>
<td class="paramname"><em>f</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>FUSE event loop with multiple threads</p>
<p>Requests from the kernel are processed, and the appropriate operations are called. Request are processed in parallel by distributing them between multiple threads.</p>
<p>Calling this function requires the pthreads library to be linked to the application.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">f</td><td>the FUSE handle </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if no error occurred, -1 otherwise </dd></dl>
</div>
</div>
<a class="anchor" id="aadced4bb8ad64e622a2d0b9e6738c97b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int fuse_loop_mt_proc </td>
<td>(</td>
<td class="paramtype">struct fuse *&#160;</td>
<td class="paramname"><em>f</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="fuse_8h.html#ab27948e20743f4c153f6ba6d71ca7182">fuse_processor_t</a>&#160;</td>
<td class="paramname"><em>proc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Multi threaded event loop, which calls the custom command processor function </p>
</div>
</div>
<a class="anchor" id="a2098b9d60626bf749801d12f2d0d6fd3"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int fuse_main_real </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>argc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>argv</em>[], </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structfuse__operations.html">fuse_operations</a> *&#160;</td>
<td class="paramname"><em>op</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>op_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>user_data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>The real main function</p>
<p>Do not call this directly, use <a class="el" href="fuse_8h.html#a61755930843c427b79622eda0ad8f083">fuse_main()</a> </p>
</div>
</div>
<a class="anchor" id="a5326844946defe4a50b3f4320786a0f4"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct fuse* fuse_new </td>
<td>(</td>
<td class="paramtype">struct fuse_chan *&#160;</td>
<td class="paramname"><em>ch</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct <a class="el" href="structfuse__args.html">fuse_args</a> *&#160;</td>
<td class="paramname"><em>args</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structfuse__operations.html">fuse_operations</a> *&#160;</td>
<td class="paramname"><em>op</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>op_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>user_data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a new FUSE filesystem.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ch</td><td>the communication channel </td></tr>
<tr><td class="paramname">args</td><td>argument vector </td></tr>
<tr><td class="paramname">op</td><td>the filesystem operations </td></tr>
<tr><td class="paramname">op_size</td><td>the size of the <a class="el" href="structfuse__operations.html">fuse_operations</a> structure </td></tr>
<tr><td class="paramname">user_data</td><td>user data supplied in the context during the init() method </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the created FUSE handle </dd></dl>
</div>
</div>
<a class="anchor" id="a638b7477f87a2aca57ef0a5c4ca1d500"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void fuse_process_cmd </td>
<td>(</td>
<td class="paramtype">struct fuse *&#160;</td>
<td class="paramname"><em>f</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct fuse_cmd *&#160;</td>
<td class="paramname"><em>cmd</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Process a single command </p>
</div>
</div>
<a class="anchor" id="aa5aaa31ed710ea1afe9467f10d523b21"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct fuse_cmd* fuse_read_cmd </td>
<td>(</td>
<td class="paramtype">struct fuse *&#160;</td>
<td class="paramname"><em>f</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Read a single command. If none are read, return NULL </p>
</div>
</div>
<a class="anchor" id="ad6380ea6c7cb4a4a4cf421d808ce2b66"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void fuse_register_module </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structfuse__module.html">fuse_module</a> *&#160;</td>
<td class="paramname"><em>mod</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Register a filesystem module</p>
<p>This function is used by FUSE_REGISTER_MODULE and there's usually no need to call it directly </p>
</div>
</div>
<a class="anchor" id="adbd6a1fa417b704972554ed983e67b85"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void fuse_set_getcontext_func </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structfuse__context.html">fuse_context</a> *(*)(void)&#160;</td>
<td class="paramname"><em>func</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function is obsolete and implemented as a no-op </p>
</div>
</div>
<a class="anchor" id="ab6dc1548ab6f04f048927dc09882563d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct fuse* fuse_setup </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>argc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>argv</em>[], </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structfuse__operations.html">fuse_operations</a> *&#160;</td>
<td class="paramname"><em>op</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>op_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char **&#160;</td>
<td class="paramname"><em>mountpoint</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int *&#160;</td>
<td class="paramname"><em>multithreaded</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>user_data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This is the part of <a class="el" href="fuse_8h.html#a61755930843c427b79622eda0ad8f083">fuse_main()</a> before the event loop </p>
</div>
</div>
<a class="anchor" id="a4b2246caec521ec4ac84093f8c4b616d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int fuse_start_cleanup_thread </td>
<td>(</td>
<td class="paramtype">struct fuse *&#160;</td>
<td class="paramname"><em>fuse</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Start the cleanup thread when using option "remember".</p>
<p>This is done automatically by <a class="el" href="fuse_8h.html#a79387240dad1f77417fd178f4b9ef0a0">fuse_loop_mt()</a> </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">fuse</td><td>struct fuse pointer for fuse instance </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success and -1 on error </dd></dl>
</div>
</div>
<a class="anchor" id="ad37fd69ba40d5c261f16e207e4a5b0ed"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void fuse_stop_cleanup_thread </td>
<td>(</td>
<td class="paramtype">struct fuse *&#160;</td>
<td class="paramname"><em>fuse</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Stop the cleanup thread when using option "remember".</p>
<p>This is done automatically by <a class="el" href="fuse_8h.html#a79387240dad1f77417fd178f4b9ef0a0">fuse_loop_mt()</a> </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">fuse</td><td>struct fuse pointer for fuse instance </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a87c736a7e6ee86348a9fdf83f6635199"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void fuse_teardown </td>
<td>(</td>
<td class="paramtype">struct fuse *&#160;</td>
<td class="paramname"><em>fuse</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>mountpoint</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This is the part of <a class="el" href="fuse_8h.html#a61755930843c427b79622eda0ad8f083">fuse_main()</a> after the event loop </p>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Apr 23 2016 09:43:20 for fuse by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.8
</small></address>
</body>
</html>