poll是一种用于监控多个文件描述符的状态变化的系统调用,它可以同时监控多个文件描述符,以便在它们中的任何一个就绪(例如,可读、可写或有异常条件)时接收通知。
poll函数的作用是将当前的文件指针挂到等待队列中,以便在文件描述符就绪时能够被通知。
以下是一个使用C语言和poll函数的简单例子:
#include <stdio.h>
#include <stdlib.h>
#include <poll.h>
#include <unistd.h>
#define MAX_EVENTS 2
int main() {
struct pollfd fds[MAX_EVENTS];
int ret;
int i;
// 初始化两个文件描述符,这里使用标准输入stdin和标准输出stdout
fds[0].fd = STDIN_FILENO;
fds[0].events = POLLIN;
fds[1].fd = STDOUT_FILENO;
fds[1].events = POLLOUT;
// 调用poll函数开始监控文件描述符
ret = poll(fds, MAX_EVENTS, -1); // -1表示无限等待,直到有事件发生
if (ret == -1) {
perror("poll");
exit(EXIT_FAILURE);
}
// 遍历所有就绪的文件描述符,处理事件
for (i = 0; i < MAX_EVENTS; i++) {
if (fds[i].revents & POLLIN) { // 如果是可读事件
char buf[1024];
printf("stdin is ready for reading\n");
fflush(stdout); // 清空输出缓冲区,确保打印内容可见
read(fds[i].fd, buf, sizeof(buf)); // 从stdin读取数据
}
if (fds[i].revents & POLLOUT) { // 如果是可写事件
printf("stdout is ready for writing\n");
fflush(stdout); // 清空输出缓冲区,确保打印内容可见
write(fds[i].fd, "Hello, world!\n", 13); // 向stdout写入数据
}
}
return 0;
}
这个例子演示了如何使用poll函数监控标准输入和标准输出文件描述符。当stdin或stdout就绪时,会打印相应的信息并执行相应的操作。
1054

被折叠的 条评论
为什么被折叠?



