> For the complete documentation index, see [llms.txt](https://astranebula.gitbook.io/blog/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://astranebula.gitbook.io/blog/software-engineering/less-than-poll.h-greater-than-library.md).

# \<poll.h> Library

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 `-1` if an error occurs.

***

### Simple implementation of the poll library:

```c
#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](https://pubs.opengroup.org/onlinepubs/7908799/xsh/poll.h.html)
