| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
| <title>Introduction: GIO Reference Manual</title> |
| <meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> |
| <link rel="home" href="index.html" title="GIO Reference Manual"> |
| <link rel="up" href="pt01.html" title="Part I. GIO Overview"> |
| <link rel="prev" href="pt01.html" title="Part I. GIO Overview"> |
| <link rel="next" href="ch02.html" title="Writing GIO applications"> |
| <meta name="generator" content="GTK-Doc V1.25.1 (XML mode)"> |
| <link rel="stylesheet" href="style.css" type="text/css"> |
| </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="5"><tr valign="middle"> |
| <td width="100%" align="left" class="shortcuts"></td> |
| <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td> |
| <td><a accesskey="u" href="pt01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td> |
| <td><a accesskey="p" href="pt01.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td> |
| <td><a accesskey="n" href="ch02.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td> |
| </tr></table> |
| <div class="chapter"> |
| <div class="titlepage"><div><div><h2 class="title"> |
| <a name="id-1.3.2"></a>Introduction</h2></div></div></div> |
| <p> |
| GIO is striving to provide a modern, easy-to-use VFS API that sits |
| at the right level in the library stack, as well as other generally |
| useful APIs for desktop applications (such as networking and |
| D-Bus support). The goal is to overcome the shortcomings of GnomeVFS |
| and provide an API that is so good that developers prefer it over raw |
| POSIX calls. Among other things that means using GObject. It also means |
| not cloning the POSIX API, but providing higher-level, document-centric |
| interfaces. |
| </p> |
| <p> |
| The abstract file system model of GIO consists of a number of |
| interfaces and base classes for I/O and files: |
| </p> |
| <div class="variablelist"><table border="0" class="variablelist"> |
| <colgroup> |
| <col align="left" valign="top"> |
| <col> |
| </colgroup> |
| <tbody> |
| <tr> |
| <td><p><span class="term">GFile</span></p></td> |
| <td><p>reference to a file</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">GFileInfo</span></p></td> |
| <td><p>information about a file or filesystem</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">GFileEnumerator</span></p></td> |
| <td><p>list files in directories</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">GDrive</span></p></td> |
| <td><p>represents a drive</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">GVolume</span></p></td> |
| <td><p>represents a file system in an abstract way</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">GMount</span></p></td> |
| <td><p>represents a mounted file system</p></td> |
| </tr> |
| </tbody> |
| </table></div> |
| <p> |
| Then there is a number of stream classes, similar to the input and |
| output stream hierarchies that can be found in frameworks like Java: |
| </p> |
| <div class="variablelist"><table border="0" class="variablelist"> |
| <colgroup> |
| <col align="left" valign="top"> |
| <col> |
| </colgroup> |
| <tbody> |
| <tr> |
| <td><p><span class="term">GInputStream</span></p></td> |
| <td><p>read data</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">GOutputStream</span></p></td> |
| <td><p>write data</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">GIOStream</span></p></td> |
| <td><p>read and write data</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">GSeekable</span></p></td> |
| <td><p>interface optionally implemented by streams to support seeking</p></td> |
| </tr> |
| </tbody> |
| </table></div> |
| <p> |
| There are interfaces related to applications and the types |
| of files they handle: |
| </p> |
| <div class="variablelist"><table border="0" class="variablelist"> |
| <colgroup> |
| <col align="left" valign="top"> |
| <col> |
| </colgroup> |
| <tbody> |
| <tr> |
| <td><p><span class="term">GAppInfo</span></p></td> |
| <td><p>information about an installed application</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">GIcon</span></p></td> |
| <td><p>abstract type for file and application icons</p></td> |
| </tr> |
| </tbody> |
| </table></div> |
| <p> |
| There is a framework for storing and retrieving application settings: |
| </p> |
| <div class="variablelist"><table border="0" class="variablelist"> |
| <colgroup> |
| <col align="left" valign="top"> |
| <col> |
| </colgroup> |
| <tbody><tr> |
| <td><p><span class="term">GSettings</span></p></td> |
| <td><p>stores and retrieves application settings</p></td> |
| </tr></tbody> |
| </table></div> |
| <p> |
| There is support for network programming, including connectivity monitoring, |
| name resolution, lowlevel socket APIs and highlevel client and server |
| helper classes: |
| </p> |
| <div class="variablelist"><table border="0" class="variablelist"> |
| <colgroup> |
| <col align="left" valign="top"> |
| <col> |
| </colgroup> |
| <tbody> |
| <tr> |
| <td><p><span class="term">GSocket</span></p></td> |
| <td><p>lowlevel platform independent socket object</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">GResolver</span></p></td> |
| <td><p>asynchronous and cancellable DNS resolver</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">GSocketClient</span></p></td> |
| <td><p>high-level network client helper</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">GSocketService</span></p></td> |
| <td><p>high-level network server helper</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">GSocketConnection</span></p></td> |
| <td><p>network connection stream</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">GNetworkMonitor</span></p></td> |
| <td><p>network connectivity monitoring</p></td> |
| </tr> |
| </tbody> |
| </table></div> |
| <p> |
| There is support for connecting to D-Bus, |
| sending and receiving messages, owning and watching bus names, |
| and making objects available on the bus: |
| </p> |
| <div class="variablelist"><table border="0" class="variablelist"> |
| <colgroup> |
| <col align="left" valign="top"> |
| <col> |
| </colgroup> |
| <tbody> |
| <tr> |
| <td><p><span class="term">GDBusConnection</span></p></td> |
| <td><p>a D-Bus connection</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">GDBusMethodInvocation</span></p></td> |
| <td><p>for handling remote calls</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">GDBusServer</span></p></td> |
| <td><p>helper for accepting connections</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">GDBusProxy</span></p></td> |
| <td><p>proxy to access D-Bus interfaces on a remote object</p></td> |
| </tr> |
| </tbody> |
| </table></div> |
| <p> |
| Beyond these, GIO provides facilities for file monitoring, |
| asynchronous I/O and filename completion. In addition to the |
| interfaces, GIO provides implementations for the local case. |
| Implementations for various network file systems are provided |
| by the GVFS package as loadable modules. |
| </p> |
| <p> |
| Other design choices which consciously break with the GnomeVFS |
| design are to move backends out-of-process, which minimizes the |
| dependency bloat and makes the whole system more robust. The backends |
| 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. |
| </p> |
| <div class="figure"> |
| <a name="gvfs-overview"></a><p class="title"><b>Figure 1. GIO in the GTK+ library stack</b></p> |
| <div class="figure-contents"><div><img src="gvfs-overview.png" alt="GIO in the GTK+ library stack"></div></div> |
| </div> |
| <br class="figure-break"><p> |
| The GIO model of I/O is stateful: if an application establishes e.g. |
| a SFTP connection to a server, it becomes available to all applications |
| in the session; the user does not have to enter his password over |
| and over again. |
| </p> |
| <p> |
| 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. |
| </p> |
| </div> |
| <div class="footer"> |
| <hr>Generated by GTK-Doc V1.25.1</div> |
| </body> |
| </html> |