On Tue, Nov 28, 2017 at 7:21 AM, Andy Williams <[email protected]> wrote:
> ajwillia-ms pushed a commit to branch master.
>
> http://git.enlightenment.org/tools/examples.git/commit/?id=bc275959dd4124ba96e87e444a38614d1453be43
>
> commit bc275959dd4124ba96e87e444a38614d1453be43
> Author: Andy Williams <[email protected]>
> Date: Tue Nov 28 09:21:09 2017 +0000
>
> core: Add Efl_Io_File example into efl-core reference
>
> Refactor the copier code into a separate method for clarity.
> ---
> reference/c/core/src/core_io.c | 98
> ++++++++++++++++++++++++++++++++++++------
> 1 file changed, 86 insertions(+), 12 deletions(-)
>
> diff --git a/reference/c/core/src/core_io.c b/reference/c/core/src/core_io.c
> index e70ee7f..3808fb8 100644
> --- a/reference/c/core/src/core_io.c
> +++ b/reference/c/core/src/core_io.c
> @@ -2,6 +2,7 @@
> #define EFL_BETA_API_SUPPORT 1
>
> #include <stdio.h>
> +#include <fcntl.h>
>
> #include <Eina.h>
> #include <Efl_Core.h>
> @@ -9,13 +10,77 @@
> /*
> * Efl.IO examples.
> *
> - * This IO example simply copies data from a source (stdin) to a
> - * destination (stdout) using an Efl.Io.Copier.
> + * This IO example shows the use of various IO APIs. First we use Efl.Io.File
> + * to read and write a standard file. Then we set up a copier to copy data
> from
> + * a source (stdin) to a destination (stdout) using an Efl.Io.Copier.
> */
>
> Eo *_copier = NULL;
>
> static void
> +_io_write(const char *filename)
> +{
> + Eina_Slice content = EINA_SLICE_STR("1. Some dummy content\n2. \n3. With
> more...\n");
> + Efl_Io_File *file;
> +
> + file = efl_add(EFL_IO_FILE_CLASS, NULL,
> + efl_file_set(efl_added, filename, NULL), // mandatory
> + efl_io_file_flags_set(efl_added, O_WRONLY | O_CREAT), //
> write and create - default is read
> + efl_io_file_mode_set(efl_added, 0644), // neccessary if we
> use O_CREAT
> + efl_io_closer_close_on_destructor_set(efl_added,
> EINA_TRUE)); // recommended
> +
> + if (!file)
> + return;
> +
> + printf("Loaded file %s for read on fd %d\n", filename,
> efl_io_reader_fd_get(file));
> +
> + if (efl_io_writer_write(file, &content, NULL) != EINA_ERROR_NO_ERROR)
> + fprintf(stderr, "Failed to write test file\n");
although this works for file, it's not a good example/approach, since
you should check and monitor "can_write" events.
likewise, monitor "can_read" before you call "efl_io_reader_read()".
The best approach is to use efl_io_copier class, that does all of that
for you in a main loop friendly way.
if you want to show case the "efl_io_reader/writer" APIs directly,
then also use can_{read,write} events... otherwise people will misuse
that.
--
Gustavo Sverzut Barbieri
--------------------------------------
Mobile: +55 (16) 99354-9890
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel