c语言 select poll例子
select和poll是C语言中常用的两个系统调用,用于在多个文件描述符上进行I/O事件的检测。它们通常用于实现高效的并发编程,可以监听多个文件描述符上的读写事件,并在有事件发生时进行相应的处理。
1. select和poll的基本概念
select和poll都是用于多路复用I/O事件的机制,它们可以同时监听多个文件描述符上是否有可读或可写事件发生。select是最早引入的多路复用机制,而poll是后来的一种扩展。
2. select的使用示例
下面是一个使用select函数的简单示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/select.h>
#include <unistd.h>
int main() {
    fd_set read_fds;
    FD_ZERO(&read_fds);
    FD_SET(STDIN_FILENO, &read_fds);
    while (1) {
        int ret = select(STDIN_FILENO + 1, &read_fds, NULL, NULL, NULL);
        if (ret == -1) {
            perror("select");
            exit(EXIT_FAILURE);
        }
        if (FD_ISSET(STDIN_FILENO, &read_fds)) {
            char buffer[1024];
            int n = read(STDIN_FILENO, buffer, sizeof(buffer));
            if (n == -1) {
                perror("read");
                exit(EXIT_FAILURE);
            }
            printf("Read %d bytes from stdin: %.*s\n", n, n, buffer);
        }
    }
    return 0;
}
c语言struct用法例子
```
上述代码中,我们首先通过FD_ZERO和FD_SET宏来初始化和设置文件描述符集合read_fds,这里我们监听标准输入文件描述符STDIN_FILENO。然后使用select函数等待文件描述符集合上有可读事件发生,如果有可读事件发生,我们通过read函数从标准输入读取数据并打印出来。
3. poll的使用示例
下面是一个使用poll函数的简单示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <poll.h>
#include <unistd.h>
int main() {
    struct pollfd fds[1];
    fds[0].fd = STDIN_FILENO;
    fds[0].events = POLLIN;
    while (1) {
        int ret = poll(fds, 1, -1);
        if (ret == -1) {
            perror("poll");
            exit(EXIT_FAILURE);
        }
        if (fds[0].revents & POLLIN) {
            char buffer[1024];
            int n = read(STDIN_FILENO, buffer, sizeof(buffer));
            if (n == -1) {
                perror("read");