ISO Example for reading/writing uart/rs-232

Chris Galas ChrisG at
Tue Dec 15 06:12:04 CET 2015

Thanks for the Write example!

So, for a Read example, I would setup a different callback (or is it advantageous to use the same callback as the Write) and read until the buffer is drained (see below)? Would it be required  to issue a ev_io_stop to halt the callback? Probably not. Another scenario: Could I put the read callback into a separate thread than the write callback (if say we are using a rs-485 asynchronous 4 wire uart)? Thanks!

void readcallback(ev_loop *loop, ev_io *ioread, int revents) {
        char c;
        int I = 1;
        while (I > 0)
                I = read(ioread->fd, c, 1);
        // ev_io_stop(loop, ioread);

-----Original Message-----
From: libev [ at] On Behalf Of Thilo Schulz
Sent: Monday, December 14, 2015 4:52 PM
To: libev at
Subject: Re: ISO Example for reading/writing uart/rs-232


wrote last source off the top of my head and the declaration of fd got lost while reshuffeling. This should work for real.

#define EV_COMPAT3 0

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <ev.h>

void somecallback(ev_loop *loop, ev_io *iowatch, int revents) {
        write(iowatch->fd, "booya", 5);
        ev_io_stop(loop, iowatch);

        ev_io iow;
        ev_loop *mainloop;
        int fd;

        fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NONBLOCK);

        if(fd >= 0)
                mainloop = ev_default_loop(EVFLAG_AUTO);
                ev_io_init(&iow, somecallback, fd, EV_WRITE);
                ev_io_start(mainloop, &iow);
                ev_run(mainloop, 0);

libev mailing list
libev at

More information about the libev mailing list