我正在尝试编写一个程序,在其中我需要监视某些事件的未命名管道的末端。我可以使用具有轮询功能的未命名管道。
如果是,请您告诉我带有函数描述符的轮询函数的语法
要使用poll,如果要检查readfd是否可读或writefd可写:
poll
readfd
writefd
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"); }