Line 1:
Line 1:
−
'''libcriu''' is a C API for CRIU, which is a simple wrapper around our [[RPC]]. Although you can use [[RPC]] directly, libcriu provides the interface that is much easier to use in C apps. Note that [[RPC]] is supported in the first place, and if you want the most recent set of features you should probably use [[RPC]].
+
'''libcriu''' is a C API for CRIU, which is a simple wrapper around our [[RPC]]. Although you can use [[RPC]] directly, libcriu is a wrapper providing the interface that is much easier to use from C code. Note that [[RPC]] is supported in the first place, and if you want the most recent set of features you should probably use [[RPC]] directly.
== Beginning ==
== Beginning ==
−
You could find libcriu header at '''lib/criu.h'''.
+
−
To create '''lib/libcriu.so''' run '''make''' in the main directory.
+
libcriu functions are defined in <code>lib/criu.h</code>.
+
+
To create a library <code>lib/libcriu.so</code>, run <code>make</code> in the main directory.
== Setup options ==
== Setup options ==
=== init options ===
=== init options ===
−
Call '''int criu_init_opts(void)''' to init request options. Note: it should be called before using any other functions from libcriu except criu_check(). Also you should use it to reinit options. It return 0 on success and -1 on fail.
+
+
Call <code>int criu_init_opts(void)</code> to initialize request options.
+
+
Note: it should be called before using any other functions from libcriu, except <code>criu_check()</code>. Also you should use it to reinitialize options. It returns 0 on success and -1 on fail.
=== set service address ===
=== set service address ===
−
Use '''void criu_set_service_address(char *address)''' to specify path to CRIU service socket. Call it with NULL to make libcriu use default address: /var/run/criu_service.socket.
+
+
Use <code>void criu_set_service_address(char *address)</code> to specify path to a CRIU service socket. Call it with NULL to make libcriu use the default address (currently <code>/var/run/criu_service.socket</code>).
=== set dump/restore options ===
=== set dump/restore options ===
−
Use criu_set_* functions to setup dump/restore options.
+
Use <code>criu_set_*</code> functions to setup dump/restore options.
+
<pre>
<pre>
void criu_set_pid(int pid);
void criu_set_pid(int pid);
Line 28:
Line 35:
</pre>
</pre>
−
If no pid is set on dump, CRIU will dump client process by default.
+
If no pid is set on dump, CRIU will dump the calling process itself.
−
'''Note:''' Whole tree <pid> must have the same uid, as a client, or client's uid must be == 0, otherwise CRIU won't dump nothing at all. See [[Usage#Security]].
+
{{Note|If a calling process is not run as root, the whole process tree to be dumped must have the same uid, otherwise CRIU refuses to dump. See [[Usage#Security]].}}
−
'''Note:''' images_dir_fd is '''required''' at dump/restore, all other options may not be set.
+
{{Note|<code>images_dir_fd</code> is '''required''' at dump/restore, all other options might be left unset.
−
Client must open directory for/with images by himself and set images_dir_fd to it's fd.
+
The client must open directory for/with images by itself and set <code>images_dir_fd</code> to the opened directory fd.
−
CRIU will open /proc/<client's_pid>/fd/<images_dir_fd>, so it will work, if client is in another namespace.
+
CRIU will open /proc/<client's_pid>/fd/<images_dir_fd>, so it will work even if the client is in another namespace.}}
The logic of setting request is the same as when setting options in console. Here is an example:
The logic of setting request is the same as when setting options in console. Here is an example:
−
<pre>#criu restore -D /path/to/imgs_dir -v4 -o restore.log</pre>
+
+
#criu restore -D /path/to/imgs_dir -v4 -o restore.log
+
is equal to:
is equal to:
<pre>
<pre>
Line 52:
Line 61:
== check/dump/restore ==
== check/dump/restore ==
+
Use this functions to check/dump/restore:
Use this functions to check/dump/restore:
<pre>
<pre>
Line 103:
Line 113:
== Examples ==
== Examples ==
+
You could find example of using libcriu at test/libcriu.
You could find example of using libcriu at test/libcriu.