Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

can we use poll function with unnamed pipes?

Tags:

c

linux

pipe

I am trying to write a program where i need to monitor ends of unnamed pipe for certain events. Can I use unnamed pipes with poll function?

If yes, can you please show me the syntax for poll function with functional descriptors

like image 876
chaitu Avatar asked Apr 04 '12 09:04

chaitu


1 Answers

An example of poll

To use poll to check if readfd is readable or writefd is writable:

int readfd;
int writefd;

// initialize readfd & writefd, ...
// e.g. with: open(2), socket(2), pipe(2), dup(2) syscalls

struct pollfd fdtab[2];

memset (fdtab, 0, sizeof(fdtab)); // not necessary, but I am paranoid

// first slot for readfd polled for input
fdtab[0].fd = readfd;
fdtab[0].events = POLLIN;
fdtab[0].revents = 0;

// second slot with writefd polled for output
fdtab[1].fd = writefd;
fdtab[1].events = POLLOUT;
fdtab[1].revents = 0;

// do the poll(2) syscall with a 100 millisecond timeout
int retpoll = poll(fdtab, 2, 100);

if (retpoll > 0) {
   if (fdtab[0].revents & POLLIN) {
      /* read from readfd, 
         since you can read from it without being blocked */
   }
   if (fdtab[1].revents & POLLOUT) {
      /* write to writefd,
         since you can write to it without being blocked */
   }
}
else if (retpoll == 0) {
   /* the poll has timed out, nothing can be read or written */
}
else {
   /* the poll failed */
   perror("poll failed");
}
like image 109
Basile Starynkevitch Avatar answered Nov 09 '22 06:11

Basile Starynkevitch