<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>udev_monitor</title> <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> <link rel="home" href="index.html" title="libudev Reference Manual"> <link rel="up" href="ch01.html" title="libudev"> <link rel="prev" href="libudev-udev-device.html" title="udev_device"> <link rel="next" href="libudev-udev-enumerate.html" title="udev_enumerate"> <meta name="generator" content="GTK-Doc V1.13 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> <link rel="chapter" href="ch01.html" title="libudev"> <link rel="index" href="api-index-full.html" title="API Index"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"> <tr valign="middle"> <td><a accesskey="p" href="libudev-udev-device.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> <td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> <th width="100%" align="center">libudev Reference Manual</th> <td><a accesskey="n" href="libudev-udev-enumerate.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> </tr> <tr><td colspan="5" class="shortcuts"> <a href="#libudev-udev-monitor.synopsis" class="shortcut">Top</a> | <a href="#libudev-udev-monitor.description" class="shortcut">Description</a> </td></tr> </table> <div class="refentry" title="udev_monitor"> <a name="libudev-udev-monitor"></a><div class="titlepage"></div> <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="libudev-udev-monitor.top_of_page"></a>udev_monitor</span></h2> <p>udev_monitor — device event source</p> </td> <td valign="top" align="right"></td> </tr></table></div> <div class="refsynopsisdiv" title="Synopsis"> <a name="libudev-udev-monitor.synopsis"></a><h2>Synopsis</h2> <pre class="synopsis">struct <a class="link" href="libudev-udev-monitor.html#udev-monitor" title="struct udev_monitor">udev_monitor</a>; struct <a class="link" href="libudev-udev-monitor.html#udev-monitor" title="struct udev_monitor"><span class="returnvalue">udev_monitor</span></a> * <a class="link" href="libudev-udev-monitor.html#udev-monitor-ref" title="udev_monitor_ref ()">udev_monitor_ref</a> (<span class="returnvalue">struct udev_monitor</span> *udev_monitor); <span class="returnvalue">void</span> <a class="link" href="libudev-udev-monitor.html#udev-monitor-unref" title="udev_monitor_unref ()">udev_monitor_unref</a> (<span class="returnvalue">struct udev_monitor</span> *udev_monitor); struct <a class="link" href="libudev-udev.html#udev" title="struct udev"><span class="returnvalue">udev</span></a> * <a class="link" href="libudev-udev-monitor.html#udev-monitor-get-udev" title="udev_monitor_get_udev ()">udev_monitor_get_udev</a> (<span class="returnvalue">struct udev_monitor</span> *udev_monitor); struct <a class="link" href="libudev-udev-monitor.html#udev-monitor" title="struct udev_monitor"><span class="returnvalue">udev_monitor</span></a> * <a class="link" href="libudev-udev-monitor.html#udev-monitor-new-from-netlink" title="udev_monitor_new_from_netlink ()">udev_monitor_new_from_netlink</a> (<span class="returnvalue">struct udev</span> *udev, const <span class="returnvalue">char</span> *name); struct <a class="link" href="libudev-udev-monitor.html#udev-monitor" title="struct udev_monitor"><span class="returnvalue">udev_monitor</span></a> * <a class="link" href="libudev-udev-monitor.html#udev-monitor-new-from-socket" title="udev_monitor_new_from_socket ()">udev_monitor_new_from_socket</a> (<span class="returnvalue">struct udev</span> *udev, const <span class="returnvalue">char</span> *socket_path); <span class="returnvalue">int</span> <a class="link" href="libudev-udev-monitor.html#udev-monitor-enable-receiving" title="udev_monitor_enable_receiving ()">udev_monitor_enable_receiving</a> (<span class="returnvalue">struct udev_monitor</span> *udev_monitor); <span class="returnvalue">int</span> <a class="link" href="libudev-udev-monitor.html#udev-monitor-get-fd" title="udev_monitor_get_fd ()">udev_monitor_get_fd</a> (<span class="returnvalue">struct udev_monitor</span> *udev_monitor); struct <a class="link" href="libudev-udev-device.html#udev-device" title="struct udev_device"><span class="returnvalue">udev_device</span></a> * <a class="link" href="libudev-udev-monitor.html#udev-monitor-receive-device" title="udev_monitor_receive_device ()">udev_monitor_receive_device</a> (<span class="returnvalue">struct udev_monitor</span> *udev_monitor); <span class="returnvalue">int</span> <a class="link" href="libudev-udev-monitor.html#udev-monitor-filter-add-match-subsystem-devtype" title="udev_monitor_filter_add_match_subsystem_devtype ()">udev_monitor_filter_add_match_subsystem_devtype</a> (<span class="returnvalue">struct udev_monitor</span> *udev_monitor, const <span class="returnvalue">char</span> *subsystem, const <span class="returnvalue">char</span> *devtype); <span class="returnvalue">int</span> <a class="link" href="libudev-udev-monitor.html#udev-monitor-filter-update" title="udev_monitor_filter_update ()">udev_monitor_filter_update</a> (<span class="returnvalue">struct udev_monitor</span> *udev_monitor); <span class="returnvalue">int</span> <a class="link" href="libudev-udev-monitor.html#udev-monitor-filter-remove" title="udev_monitor_filter_remove ()">udev_monitor_filter_remove</a> (<span class="returnvalue">struct udev_monitor</span> *udev_monitor); </pre> </div> <div class="refsect1" title="Description"> <a name="libudev-udev-monitor.description"></a><h2>Description</h2> <p> Connects to a device event source.</p> </div> <div class="refsect1" title="Details"> <a name="libudev-udev-monitor.details"></a><h2>Details</h2> <div class="refsect2" title="struct udev_monitor"> <a name="udev-monitor"></a><h3>struct udev_monitor</h3> <pre class="programlisting">struct udev_monitor;</pre> <p> Opaque object handling one event source.</p> </div> <hr> <div class="refsect2" title="udev_monitor_ref ()"> <a name="udev-monitor-ref"></a><h3>udev_monitor_ref ()</h3> <pre class="programlisting">struct <a class="link" href="libudev-udev-monitor.html#udev-monitor" title="struct udev_monitor"><span class="returnvalue">udev_monitor</span></a> * udev_monitor_ref (<span class="returnvalue">struct udev_monitor</span> *udev_monitor);</pre> <p> Take a reference of a udev monitor.</p> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term"><em class="parameter"><code>udev_monitor</code></em> :</span></p></td> <td> udev monitor </td> </tr> <tr> <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td> <td> the passed udev monitor </td> </tr> </tbody> </table></div> </div> <hr> <div class="refsect2" title="udev_monitor_unref ()"> <a name="udev-monitor-unref"></a><h3>udev_monitor_unref ()</h3> <pre class="programlisting"><span class="returnvalue">void</span> udev_monitor_unref (<span class="returnvalue">struct udev_monitor</span> *udev_monitor);</pre> <p> Drop a reference of a udev monitor. If the refcount reaches zero, the bound socket will be closed, and the resources of the monitor will be released.</p> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> <td><p><span class="term"><em class="parameter"><code>udev_monitor</code></em> :</span></p></td> <td> udev monitor </td> </tr></tbody> </table></div> </div> <hr> <div class="refsect2" title="udev_monitor_get_udev ()"> <a name="udev-monitor-get-udev"></a><h3>udev_monitor_get_udev ()</h3> <pre class="programlisting">struct <a class="link" href="libudev-udev.html#udev" title="struct udev"><span class="returnvalue">udev</span></a> * udev_monitor_get_udev (<span class="returnvalue">struct udev_monitor</span> *udev_monitor);</pre> <p> Retrieve the udev library context the monitor was created with.</p> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term"><em class="parameter"><code>udev_monitor</code></em> :</span></p></td> <td> udev monitor </td> </tr> <tr> <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td> <td> the udev library context </td> </tr> </tbody> </table></div> </div> <hr> <div class="refsect2" title="udev_monitor_new_from_netlink ()"> <a name="udev-monitor-new-from-netlink"></a><h3>udev_monitor_new_from_netlink ()</h3> <pre class="programlisting">struct <a class="link" href="libudev-udev-monitor.html#udev-monitor" title="struct udev_monitor"><span class="returnvalue">udev_monitor</span></a> * udev_monitor_new_from_netlink (<span class="returnvalue">struct udev</span> *udev, const <span class="returnvalue">char</span> *name);</pre> <p> Create new udev monitor and connect to a specified event source. Valid sources identifiers are "udev" and "kernel". </p> <p> Applications should usually not connect directly to the "kernel" events, because the devices might not be useable at that time, before udev has configured them, and created device nodes. </p> <p> Accessing devices at the same time as udev, might result in unpredictable behavior. </p> <p> The "udev" events are sent out after udev has finished its event processing, all rules have been processed, and needed device nodes are created. </p> <p> The initial refcount is 1, and needs to be decremented to release the resources of the udev monitor.</p> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term"><em class="parameter"><code>udev</code></em> :</span></p></td> <td> udev library context </td> </tr> <tr> <td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td> <td> name of event source </td> </tr> <tr> <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td> <td> a new udev monitor, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>, in case of an error </td> </tr> </tbody> </table></div> </div> <hr> <div class="refsect2" title="udev_monitor_new_from_socket ()"> <a name="udev-monitor-new-from-socket"></a><h3>udev_monitor_new_from_socket ()</h3> <pre class="programlisting">struct <a class="link" href="libudev-udev-monitor.html#udev-monitor" title="struct udev_monitor"><span class="returnvalue">udev_monitor</span></a> * udev_monitor_new_from_socket (<span class="returnvalue">struct udev</span> *udev, const <span class="returnvalue">char</span> *socket_path);</pre> <p> Create new udev monitor and connect to a specified socket. The path to a socket either points to an existing socket file, or if the socket path starts with a '@' character, an abstract namespace socket will be used. </p> <p> A socket file will not be created. If it does not already exist, it will fall-back and connect to an abstract namespace socket with the given path. The permissions adjustment of a socket file, as well as the later cleanup, needs to be done by the caller. </p> <p> The initial refcount is 1, and needs to be decremented to release the resources of the udev monitor.</p> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term"><em class="parameter"><code>udev</code></em> :</span></p></td> <td> udev library context </td> </tr> <tr> <td><p><span class="term"><em class="parameter"><code>socket_path</code></em> :</span></p></td> <td> unix socket path </td> </tr> <tr> <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td> <td> a new udev monitor, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>, in case of an error </td> </tr> </tbody> </table></div> </div> <hr> <div class="refsect2" title="udev_monitor_enable_receiving ()"> <a name="udev-monitor-enable-receiving"></a><h3>udev_monitor_enable_receiving ()</h3> <pre class="programlisting"><span class="returnvalue">int</span> udev_monitor_enable_receiving (<span class="returnvalue">struct udev_monitor</span> *udev_monitor);</pre> <p> Binds the <em class="parameter"><code>udev_monitor</code></em> socket to the event source.</p> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term"><em class="parameter"><code>udev_monitor</code></em> :</span></p></td> <td> the monitor which should receive events </td> </tr> <tr> <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td> <td> 0 on success, otherwise a negative error value. </td> </tr> </tbody> </table></div> </div> <hr> <div class="refsect2" title="udev_monitor_get_fd ()"> <a name="udev-monitor-get-fd"></a><h3>udev_monitor_get_fd ()</h3> <pre class="programlisting"><span class="returnvalue">int</span> udev_monitor_get_fd (<span class="returnvalue">struct udev_monitor</span> *udev_monitor);</pre> <p> Retrieve the socket file descriptor associated with the monitor.</p> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term"><em class="parameter"><code>udev_monitor</code></em> :</span></p></td> <td> udev monitor </td> </tr> <tr> <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td> <td> the socket file descriptor </td> </tr> </tbody> </table></div> </div> <hr> <div class="refsect2" title="udev_monitor_receive_device ()"> <a name="udev-monitor-receive-device"></a><h3>udev_monitor_receive_device ()</h3> <pre class="programlisting">struct <a class="link" href="libudev-udev-device.html#udev-device" title="struct udev_device"><span class="returnvalue">udev_device</span></a> * udev_monitor_receive_device (<span class="returnvalue">struct udev_monitor</span> *udev_monitor);</pre> <p> Receive data from the udev monitor socket, allocate a new udev device, fill in the received data, and return the device. </p> <p> Only socket connections with uid=0 are accepted. The caller needs to make sure that there is data to read from the socket. The call will block until the socket becomes readable. </p> <p> The initial refcount is 1, and needs to be decremented to release the resources of the udev device.</p> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term"><em class="parameter"><code>udev_monitor</code></em> :</span></p></td> <td> udev monitor </td> </tr> <tr> <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td> <td> a new udev device, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>, in case of an error </td> </tr> </tbody> </table></div> </div> <hr> <div class="refsect2" title="udev_monitor_filter_add_match_subsystem_devtype ()"> <a name="udev-monitor-filter-add-match-subsystem-devtype"></a><h3>udev_monitor_filter_add_match_subsystem_devtype ()</h3> <pre class="programlisting"><span class="returnvalue">int</span> udev_monitor_filter_add_match_subsystem_devtype (<span class="returnvalue">struct udev_monitor</span> *udev_monitor, const <span class="returnvalue">char</span> *subsystem, const <span class="returnvalue">char</span> *devtype);</pre> <p> The filter must be installed before the monitor is switched to listening mode.</p> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term"><em class="parameter"><code>udev_monitor</code></em> :</span></p></td> <td> the monitor </td> </tr> <tr> <td><p><span class="term"><em class="parameter"><code>subsystem</code></em> :</span></p></td> <td> the subsystem value to match the incoming devices against </td> </tr> <tr> <td><p><span class="term"><em class="parameter"><code>devtype</code></em> :</span></p></td> <td> the devtype value to match the incoming devices against </td> </tr> <tr> <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td> <td> 0 on success, otherwise a negative error value. </td> </tr> </tbody> </table></div> </div> <hr> <div class="refsect2" title="udev_monitor_filter_update ()"> <a name="udev-monitor-filter-update"></a><h3>udev_monitor_filter_update ()</h3> <pre class="programlisting"><span class="returnvalue">int</span> udev_monitor_filter_update (<span class="returnvalue">struct udev_monitor</span> *udev_monitor);</pre> <p> Update the installed filter. This might only be needed, if the filter was removed or changed.</p> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term"><em class="parameter"><code>udev_monitor</code></em> :</span></p></td> <td> monitor </td> </tr> <tr> <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td> <td> 0 on success, otherwise a negative error value. </td> </tr> </tbody> </table></div> </div> <hr> <div class="refsect2" title="udev_monitor_filter_remove ()"> <a name="udev-monitor-filter-remove"></a><h3>udev_monitor_filter_remove ()</h3> <pre class="programlisting"><span class="returnvalue">int</span> udev_monitor_filter_remove (<span class="returnvalue">struct udev_monitor</span> *udev_monitor);</pre> <p> Remove all filters from monitor.</p> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term"><em class="parameter"><code>udev_monitor</code></em> :</span></p></td> <td> monitor </td> </tr> <tr> <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td> <td> 0 on success, otherwise a negative error value. </td> </tr> </tbody> </table></div> </div> </div> </div> <div class="footer"> <hr> Generated by GTK-Doc V1.13</div> </body> </html>