I learned about the <poll.h> library. The purpose of this library is to function as an event listener. The library includes a function that waits for a set of file descriptors to become ready for I/O operations (input, output). I used this library in parallel with a thread where I monitor a GPIO pin for events triggered by pressing a push-button on my Raspberry Pi board. When the push button is pressed and the voltage increases, the interrupt is triggered and will activate or deactivate an LED based on a defined function I created.
The pollfd structure is used to store information about a file descriptor.
- The first argument is the file descriptor.
- The second argument is the events the file descriptor is interested in.
- The third argument is the events that have occurred.
The poll() function is used to wait for a set of file descriptors to become ready for I/O operations.
- The first argument is a pointer to an array of pollfd structures.
- The second argument is the number of elements in the array.
- The third argument is the timeout in milliseconds.
- The function returns the number of file descriptors ready for I/O operations, or
-1if an error occurs.
Simple implementation of the poll library:
#include <poll.h>
int main()
{
struct pollfd fds[1];
fds[0].fd = open("/sys/class/gpio/gpio6/value", O_RDWR);
fds[0].events = POLLPRI;
fds[0].revents = 0;
int myPoll = poll(fds, 0, 5000);
if (myPoll < 0)
{
// the poll couldn't start
}
else if (myPoll == 0)
{
// the poll timed out!
}
else
{
// do something
}
return 0;
}Here is the documentation for the poll.h library