Linux多路复用I/O是一种高效的I/O处理方式,允许单个线程或进程同时监控和处理多个文件描述符(sockets、pipes等)上的I/O事件。以下是对该技术的详细解释:
#include <sys/epoll.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#define MAX_EVENTS 10
int main() {
int epoll_fd = epoll_create1(0);
if (epoll_fd == -1) {
perror("epoll_create1");
return 1;
}
struct epoll_event event;
event.events = EPOLLIN;
event.data.fd = STDIN_FILENO;
if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, STDIN_FILENO, &event) == -1) {
perror("epoll_ctl");
close(epoll_fd);
return 1;
}
struct epoll_event events[MAX_EVENTS];
while (1) {
int nfds = epoll_wait(epoll_fd, events, MAX_EVENTS, -1);
if (nfds == -1) {
perror("epoll_wait");
break;
}
for (int i = 0; i < nfds; ++i) {
if (events[i].data.fd == STDIN_FILENO) {
char buf[256];
ssize_t len = read(STDIN_FILENO, buf, sizeof(buf));
if (len > 0) {
buf[len] = '\0';
printf("Read: %s", buf);
}
}
}
}
close(epoll_fd);
return 0;
}
这个示例代码展示了如何使用epoll来监控标准输入(stdin)上的可读事件,并在数据可用时读取并打印出来。
领取专属 10元无门槛券
手把手带您无忧上云