| 
									
										
										
										
											2007-12-17 17:28:40 +00:00
										 |  |  | <part> | 
					
						
							|  |  |  |   <title>GIO Overview</title> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-18 03:14:39 +00:00
										 |  |  |   <chapter>  | 
					
						
							|  |  |  |     <title>Introduction</title> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-18 00:56:35 +00:00
										 |  |  |   <para> | 
					
						
							| 
									
										
										
										
											2007-12-18 03:14:39 +00:00
										 |  |  |     GIO is striving to provide a modern, easy-to-use VFS API that sits | 
					
						
							| 
									
										
										
										
											2007-12-18 00:56:35 +00:00
										 |  |  |     at the right level in the library stack. The goal is to overcome the | 
					
						
							| 
									
										
										
										
											2007-12-18 03:14:39 +00:00
										 |  |  |     shortcomings of GnomeVFS and provide an API that is so good that | 
					
						
							| 
									
										
										
										
											2007-12-18 00:56:35 +00:00
										 |  |  |     developers prefer it over raw POSIX calls. Among other things | 
					
						
							|  |  |  |     that means using GObject. It also means not cloning the POSIX  | 
					
						
							| 
									
										
										
										
											2007-12-19 11:19:12 +00:00
										 |  |  |     API, but providing higher-level, document-centric interfaces. | 
					
						
							| 
									
										
										
										
											2007-12-18 00:56:35 +00:00
										 |  |  |   </para> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <para> | 
					
						
							|  |  |  |     The abstract file system model of GIO consists of a number of | 
					
						
							|  |  |  |     interfaces and base classes for I/O and files: | 
					
						
							|  |  |  |     <variablelist> | 
					
						
							|  |  |  |        <varlistentry> | 
					
						
							|  |  |  |          <term>GFile</term> | 
					
						
							|  |  |  |          <listitem><para>reference to a file</para></listitem> | 
					
						
							|  |  |  |        </varlistentry> | 
					
						
							|  |  |  |        <varlistentry> | 
					
						
							|  |  |  |          <term>GFileInfo</term> | 
					
						
							|  |  |  |          <listitem><para>information about a file or filesystem</para></listitem> | 
					
						
							|  |  |  |        </varlistentry> | 
					
						
							|  |  |  |        <varlistentry> | 
					
						
							|  |  |  |          <term>GFileEnumerator</term> | 
					
						
							|  |  |  |          <listitem><para>list files in directories</para></listitem> | 
					
						
							|  |  |  |        </varlistentry> | 
					
						
							|  |  |  |        <varlistentry> | 
					
						
							|  |  |  |          <term>GDrive</term> | 
					
						
							|  |  |  |          <listitem><para>represents a drive</para></listitem> | 
					
						
							|  |  |  |        </varlistentry> | 
					
						
							|  |  |  |        <varlistentry> | 
					
						
							|  |  |  |          <term>GVolume</term> | 
					
						
							|  |  |  |          <listitem><para>represents a file system in an abstract way</para></listitem> | 
					
						
							|  |  |  |        </varlistentry> | 
					
						
							|  |  |  |        <varlistentry> | 
					
						
							|  |  |  |          <term>GMount</term> | 
					
						
							|  |  |  |          <listitem><para>represents a mounted file system</para></listitem> | 
					
						
							|  |  |  |        </varlistentry> | 
					
						
							|  |  |  |     </variablelist> | 
					
						
							|  |  |  |     Then there is a number of stream classes, similar to the input and | 
					
						
							|  |  |  |     output stream hierarchies that can be found in frameworks like Java: | 
					
						
							|  |  |  |     <variablelist> | 
					
						
							|  |  |  |        <varlistentry> | 
					
						
							|  |  |  |          <term>GInputStream</term> | 
					
						
							|  |  |  |          <listitem><para>read data</para></listitem> | 
					
						
							|  |  |  |        </varlistentry> | 
					
						
							|  |  |  |        <varlistentry> | 
					
						
							|  |  |  |          <term>GOutputStream</term> | 
					
						
							|  |  |  |          <listitem><para>write data</para></listitem> | 
					
						
							|  |  |  |        </varlistentry> | 
					
						
							|  |  |  |        <varlistentry> | 
					
						
							|  |  |  |          <term>GSeekable</term> | 
					
						
							| 
									
										
										
										
											2007-12-19 11:19:12 +00:00
										 |  |  |          <listitem><para>interface optionally implemented by streams to support seeking</para></listitem> | 
					
						
							| 
									
										
										
										
											2007-12-18 00:56:35 +00:00
										 |  |  |        </varlistentry> | 
					
						
							|  |  |  |     </variablelist> | 
					
						
							|  |  |  |     There are interfaces related to applications and the types | 
					
						
							|  |  |  |     of files they handle: | 
					
						
							|  |  |  |     <variablelist> | 
					
						
							|  |  |  |        <varlistentry> | 
					
						
							|  |  |  |           <term>GAppInfo</term> | 
					
						
							|  |  |  |           <listitem><para>information about an installed application</para></listitem> | 
					
						
							|  |  |  |        </varlistentry> | 
					
						
							|  |  |  |        <varlistentry> | 
					
						
							|  |  |  |           <term>GIcon</term> | 
					
						
							|  |  |  |           <listitem><para>abstract type for file and application icons</para></listitem> | 
					
						
							|  |  |  |        </varlistentry> | 
					
						
							|  |  |  |     </variablelist> | 
					
						
							|  |  |  |     Beyond these, GIO provides facilities for file monitoring, | 
					
						
							| 
									
										
										
										
											2007-12-18 03:14:39 +00:00
										 |  |  |     asynchronous I/O and filename completion. In addition to the  | 
					
						
							| 
									
										
										
										
											2007-12-18 00:56:35 +00:00
										 |  |  |     interfaces, GIO provides implementations for the local case.  | 
					
						
							|  |  |  |     Implementations for various network file systems are provided  | 
					
						
							|  |  |  |     by the GVFS package as loadable modules. | 
					
						
							|  |  |  |   </para> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <para> | 
					
						
							| 
									
										
										
										
											2007-12-18 03:14:39 +00:00
										 |  |  |     Other design choices which consciously break with the GnomeVFS | 
					
						
							| 
									
										
										
										
											2007-12-18 00:56:35 +00:00
										 |  |  |     design are to move backends out-of-process, which minimizes the | 
					
						
							|  |  |  |     dependency bloat and makes the whole system more robust. The backends | 
					
						
							| 
									
										
										
										
											2007-12-18 03:14:39 +00:00
										 |  |  |     are not included in GIO, but in the separate GVFS package. The GVFS  | 
					
						
							|  |  |  |     package also contains the GVFS daemon, which spawn further mount  | 
					
						
							|  |  |  |     daemons for each individual connection. | 
					
						
							| 
									
										
										
										
											2007-12-18 00:56:35 +00:00
										 |  |  |   </para> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-18 03:14:39 +00:00
										 |  |  |   <figure id="gvfs-overview"> | 
					
						
							|  |  |  |     <title>GIO in the GTK+ library stack</title> | 
					
						
							|  |  |  |     <graphic fileref="gvfs-overview.png" format="PNG"></graphic> | 
					
						
							|  |  |  |   </figure> | 
					
						
							| 
									
										
										
										
											2007-12-17 17:28:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-18 00:56:35 +00:00
										 |  |  |   <para> | 
					
						
							|  |  |  |     The GIO model of I/O is stateful: if an application establishes e.g.  | 
					
						
							| 
									
										
										
										
											2007-12-18 03:14:39 +00:00
										 |  |  |     a SFTP connection to a server, it becomes available to all applications  | 
					
						
							| 
									
										
										
										
											2007-12-18 00:56:35 +00:00
										 |  |  |     in the session; the user does not have to enter his password over  | 
					
						
							|  |  |  |     and over again. | 
					
						
							|  |  |  |   </para> | 
					
						
							|  |  |  |   <para> | 
					
						
							|  |  |  |     One of the big advantages of putting the VFS in the GLib layer  | 
					
						
							|  |  |  |     is that GTK+ can directly use it, e.g. in the filechooser. | 
					
						
							|  |  |  |   </para> | 
					
						
							| 
									
										
										
										
											2007-12-18 03:14:39 +00:00
										 |  |  |   </chapter> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <chapter> | 
					
						
							|  |  |  |     <title>Compiling GIO applications</title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |       GIO comes with a <filename>gio-2.0.pc</filename> file that you | 
					
						
							|  |  |  |       should use together with <literal>pkg-config</literal> to obtain | 
					
						
							|  |  |  |       the necessary information about header files and libraries. See | 
					
						
							|  |  |  |       the <literal>pkg-config</literal> man page or the GLib documentation  | 
					
						
							|  |  |  |       for more information on how to use <literal>pkg-config</literal>  | 
					
						
							|  |  |  |       to compile your application. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |       If you are using GIO on UNIX-like systems, you may want to use | 
					
						
							|  |  |  |       UNIX-specific GIO interfaces such as #GUnixInputStream,  | 
					
						
							|  |  |  |       #GUnixOutputStream, #GUnixMount or #GDesktopAppInfo.  | 
					
						
							|  |  |  |       To do so, use the <filename>gio-unix-2.0.pc</filename> file  | 
					
						
							|  |  |  |       instead of <filename>gio-2.0.pc</filename> | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |   </chapter> | 
					
						
							| 
									
										
										
										
											2007-12-18 00:56:35 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-23 06:24:27 +00:00
										 |  |  |   <chapter> | 
					
						
							|  |  |  |     <title>Running GIO applications</title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |       GIO inspects a few of environment variables in addition to the | 
					
						
							|  |  |  |       ones used by GLib. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <formalpara> | 
					
						
							|  |  |  |       <title><envar>XDG_DATA_HOME</envar>, <envar>XDG_DATA_DIRS</envar></title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |         GIO uses these environment variables to locate MIME information.  | 
					
						
							|  |  |  |         For more information, see the <ulink url="http://freedesktop.org/Standards/shared-mime-info-spec">Shared MIME-info Database</ulink> | 
					
						
							|  |  |  |         and the <ulink url="http://freedesktop.org/Standards/basedir-spec">Base Directory Specification</ulink>. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |     </formalpara> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-19 20:36:56 +00:00
										 |  |  |     <formalpara> | 
					
						
							|  |  |  |       <title><envar>GVFS_DISABLE_FUSE</envar></title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |         This variable can be set to keep #Gvfs from starting the fuse backend, | 
					
						
							|  |  |  |         which may be unwanted or unnecessary in certain situations. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |     </formalpara> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-23 06:24:27 +00:00
										 |  |  |     <para> | 
					
						
							|  |  |  |       The following environment variables are only useful for debugging | 
					
						
							|  |  |  |       GIO itself or modules that it loads. They should not be set in a | 
					
						
							|  |  |  |       production environment. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <formalpara> | 
					
						
							|  |  |  |       <title><envar>GIO_USE_VFS</envar></title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |         This environment variable can be set to the name of a #GVfs  | 
					
						
							|  |  |  |         implementation to override the default for debugging purposes. | 
					
						
							|  |  |  |         The #GVfs implementation for local files that is included in GIO  | 
					
						
							|  |  |  |         has the name "local", the implementation in the gvfs module has  | 
					
						
							|  |  |  |         the name "gvfs".  | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |     </formalpara> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <formalpara> | 
					
						
							|  |  |  |       <title><envar>GIO_USE_VOLUME_MONITOR</envar></title> | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |         This variable can be set to the name of a #GVolumeMonitor  | 
					
						
							|  |  |  |         implementation to override the default for debugging purposes. | 
					
						
							|  |  |  |         The #GVolumeMonitor implementation for local files that is included | 
					
						
							|  |  |  |         in GIO has the name "unix", the hal-based implementation in the | 
					
						
							|  |  |  |         gvfs module has the name "hal". | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |     </formalpara> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-11 07:18:56 +00:00
										 |  |  |     <formalpara> | 
					
						
							|  |  |  |       <title><envar>GIO_USE_URI_ASSOCIATION</envar></title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |         This variable can be set to the name of a #GDesktopAppInfoLookup | 
					
						
							| 
									
										
										
										
											2008-03-28 14:31:09 +00:00
										 |  |  |         implementation to override the default for debugging purposes. | 
					
						
							| 
									
										
										
										
											2008-02-11 07:18:56 +00:00
										 |  |  |         GIO does not include a #GDesktopAppInfoLookup implementation, | 
					
						
							|  |  |  |         the GConf-based implementation in the gvfs module has the name | 
					
						
							|  |  |  |         "gconf".   | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |     </formalpara> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-23 06:24:27 +00:00
										 |  |  |     <formalpara> | 
					
						
							|  |  |  |       <title><envar>GVFS_INOTIFY_DIAG</envar></title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |         When this environment variable is set and GIO has been built | 
					
						
							|  |  |  |         with inotify support, a dump of diagnostic inotify information  | 
					
						
							|  |  |  |         will be written every 20 seconds to a file named | 
					
						
							|  |  |  |         <filename>/tmp/gvfsdid.<replaceable>pid</replaceable></filename>. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |     </formalpara> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-28 14:31:09 +00:00
										 |  |  |     <formalpara> | 
					
						
							|  |  |  |       <title><envar>GIO_EXTRA_MODULES</envar></title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  | 	When this environment variable is set to a path, or a set of  | 
					
						
							|  |  |  | 	paths separated by a colon, GIO will attempt to load | 
					
						
							|  |  |  | 	modules from within the path. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |     </formalpara> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-23 06:24:27 +00:00
										 |  |  |   </chapter> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-07-16 06:30:12 +00:00
										 |  |  |   <chapter id="extending-gio"> | 
					
						
							| 
									
										
										
										
											2008-02-11 07:18:56 +00:00
										 |  |  |     <title>Extending GIO</title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |       A lot of the functionality that is accessible through GIO | 
					
						
							|  |  |  |       is implemented in loadable modules, and modules provide a convenient | 
					
						
							|  |  |  |       way to extend GIO. In addition to the #GIOModule API which supports  | 
					
						
							|  |  |  |       writing such modules, GIO has a mechanism to define extension points, | 
					
						
							|  |  |  |       and register implementations thereof, see #GIOExtensionPoint. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |       The following extension points are currently defined by GIO: | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <formalpara> | 
					
						
							|  |  |  |        <title>G_VFS_EXTENSION_POINT_NAME</title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        <para> | 
					
						
							|  |  |  |           Allows to override the functionality of the #GVfs class. | 
					
						
							|  |  |  |           Implementations of this extension point must be derived from #GVfs. | 
					
						
							|  |  |  |           GIO uses the implementation with the highest priority that is active, | 
					
						
							|  |  |  |           see g_vfs_is_active(). | 
					
						
							|  |  |  |        </para> | 
					
						
							|  |  |  |        <para> | 
					
						
							|  |  |  |           GIO implements this extension point for local files, gvfs contains | 
					
						
							|  |  |  |           an implementation that supports all the backends in gvfs. | 
					
						
							|  |  |  |        </para> | 
					
						
							|  |  |  |    </formalpara> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    <formalpara> | 
					
						
							|  |  |  |       <title>G_VOLUME_MONITOR_EXTENSION_POINT_NAME</title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |          Allows to add more volume monitors. | 
					
						
							|  |  |  |          Implementations of this extension point must be derived from | 
					
						
							|  |  |  |          #GVolumeMonitor. GIO uses all registered extensions. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |         gvfs contains an implementation that works together with the #GVfs | 
					
						
							|  |  |  |         implementation in gvfs. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |    </formalpara> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    <formalpara> | 
					
						
							|  |  |  |       <title>G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME</title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |          Allows to override the 'native' volume monitor. | 
					
						
							|  |  |  |          Implementations of this extension point must be derived from | 
					
						
							|  |  |  |          #GNativeVolumeMonitor. GIO uses the implementation with | 
					
						
							|  |  |  |          the highest priority that is supported, as determined by the | 
					
						
							|  |  |  |          is_supported() vfunc in #GVolumeMonitorClass. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |          GIO implements this extension point for local mounts,  | 
					
						
							|  |  |  |          gvfs contains a hal-based implementation.  | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |    </formalpara> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    <formalpara> | 
					
						
							|  |  |  |       <title>G_LOCAL_FILE_MONITOR_EXTENSION_POINT_NAME</title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |         Allows to override the file monitor implementation for  | 
					
						
							|  |  |  |         local files. Implementations of this extension point must  | 
					
						
							|  |  |  |         be derived from #GLocalFileMonitor. GIO uses the implementation  | 
					
						
							|  |  |  |         with the highest priority that is supported, as determined by the | 
					
						
							|  |  |  |         is_supported() vfunc in #GLocalFileMonitorClass. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |         GIO uses this extension point internally, to switch between | 
					
						
							|  |  |  |         its fam-based and inotify-based file monitoring implementations. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |    </formalpara> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    <formalpara> | 
					
						
							|  |  |  |       <title>G_LOCAL_DIRECTORY_MONITOR_EXTENSION_POINT_NAME</title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |         Allows to override the directory monitor implementation for  | 
					
						
							|  |  |  |         local files. Implementations of this extension point must be  | 
					
						
							|  |  |  |         derived from #GLocalDirectoryMonitor. GIO uses the implementation | 
					
						
							|  |  |  |         with the highest priority that is supported, as determined by the | 
					
						
							|  |  |  |         is_supported() vfunc in #GLocalDirectoryMonitorClass. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |         GIO uses this extension point internally, to switch between | 
					
						
							|  |  |  |         its fam-based and inotify-based directory monitoring implementations. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |    </formalpara> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    <formalpara> | 
					
						
							|  |  |  |       <title>G_DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME</title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |         Unix-only. Allows to provide a way to associate default handlers | 
					
						
							|  |  |  |         with URI schemes. Implementations of this extension point must  | 
					
						
							|  |  |  |         implement the #GDesktopAppInfoLookup interface. GIO uses the  | 
					
						
							|  |  |  |         implementation with the highest priority. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |         gvfs contains a GConf-based implementation that uses the  | 
					
						
							|  |  |  |         same GConf keys as gnome-vfs. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |    </formalpara> | 
					
						
							|  |  |  |   </chapter> | 
					
						
							| 
									
										
										
										
											2007-12-17 17:28:40 +00:00
										 |  |  | </part> |