## Reading and Writing Reading and Writing — |

## Synopsis

    enum        GnomeVFSSeekPosition;
    GnomeVFSResult gnome_vfs_read               (GnomeVFSHandle *handle,
                                                 gpointer buffer,
                                                 GnomeVFSFileSize bytes,
                                                 GnomeVFSFileSize *bytes_read);
    GnomeVFSResult gnome_vfs_write              (GnomeVFSHandle *handle,
                                                 gconstpointer buffer,
                                                 GnomeVFSFileSize bytes,
                                                 GnomeVFSFileSize *bytes_written);
    GnomeVFSResult gnome_vfs_seek               (GnomeVFSHandle *handle,
                                                 GnomeVFSSeekPosition whence,
                                                 GnomeVFSFileOffset offset);
    GnomeVFSResult gnome_vfs_tell               (GnomeVFSHandle *handle,
                                                 GnomeVFSFileSize *offset_return);

## Description

Reading and writing operations are explained, also `gnome_vfs_seek`, which is used to move the file pointer inside the file.

## Details

### enum GnomeVFSSeekPosition

    typedef enum {
            GNOME_VFS_SEEK_START,
            GNOME_VFS_SEEK_CURRENT,
            GNOME_VFS_SEEK_END
    } GnomeVFSSeekPosition;

This is used to specify the start position for seek operations.

`GNOME_VFS_SEEK_START` | Start of the file.
`GNOME_VFS_SEEK_CURRENT` | Current position.
`GNOME_VFS_SEEK_END` | End of the file.

### gnome_vfs_read ()

    GnomeVFSResult gnome_vfs_read               (GnomeVFSHandle *handle,
                                                 gpointer buffer,
                                                 GnomeVFSFileSize bytes,
                                                 GnomeVFSFileSize *bytes_read);

Read `bytes` from `handle`. As with Unix system calls, the number of bytes read can effectively be less than `bytes` on return and will be stored in `bytes_read`.

`handle` : | handle of the file to read data from.
`buffer` : | pointer to a buffer that must be at least `bytes` bytes large.
`bytes` : | number of bytes to read.
`bytes_read` : | pointer to a variable that will hold the number of bytes effectively read on return.
Returns : | an integer representing the result of the operation.

### gnome_vfs_write ()

    GnomeVFSResult gnome_vfs_write              (GnomeVFSHandle *handle,
                                                 gconstpointer buffer,
                                                 GnomeVFSFileSize bytes,
                                                 GnomeVFSFileSize *bytes_written);

Write `bytes` into the file opened through `handle`. As with Unix system calls, the number of bytes written can effectively be less than `bytes` on return and will be stored in `bytes_written`.

`handle` : | handle of the file to write data to.
`buffer` : | pointer to the buffer containing the data to be written.
`bytes` : | number of bytes to write.
`bytes_written` : | pointer to a variable that will hold the number of bytes effectively written on return.
Returns : | an integer representing the result of the operation.

### gnome_vfs_seek ()

    GnomeVFSResult gnome_vfs_seek               (GnomeVFSHandle *handle,
                                                 GnomeVFSSeekPosition whence,
                                                 GnomeVFSFileOffset offset);

Set the current position for reading/writing through `handle`.

`handle` : | handle for which the current position must be changed.
`whence` : | integer value representing the starting position.
`offset` : | number of bytes to skip from the position specified by `whence`. (a positive value means to move forward; a negative one to move backwards).
Returns : | an integer representing the result of the operation.

### gnome_vfs_tell ()

    GnomeVFSResult gnome_vfs_tell               (GnomeVFSHandle *handle,
                                                 GnomeVFSFileSize *offset_return);

Return the current position on `handle`. This is the point in the file pointed to by handle that reads and writes will occur on.

`handle` : | handle for which the current position must be retrieved.
`offset_return` : | pointer to a variable that will contain the current position on return.
Returns : | an integer representing the result of the operation.