MST

星途 面试题库

面试题:C语言中如何实现非阻塞I/O

在Linux环境下,使用C语言,描述如何将一个文件描述符设置为非阻塞模式,并给出简单代码示例。假设已经获取到文件描述符fd。
46.0万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 设置文件描述符为非阻塞模式的步骤
    • 使用fcntl函数来操作文件描述符的标志。
    • 首先通过fcntl获取文件描述符当前的标志,然后添加O_NONBLOCK标志,最后再通过fcntl设置新的标志。
  2. 代码示例
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main() {
    int fd = open("test.txt", O_RDONLY);
    if (fd == -1) {
        perror("open");
        exit(EXIT_FAILURE);
    }
    int flags = fcntl(fd, F_GETFL, 0);
    if (flags == -1) {
        perror("fcntl F_GETFL");
        close(fd);
        exit(EXIT_FAILURE);
    }
    flags |= O_NONBLOCK;
    if (fcntl(fd, F_SETFL, flags) == -1) {
        perror("fcntl F_SETFL");
        close(fd);
        exit(EXIT_FAILURE);
    }
    // 在这里可以进行非阻塞的I/O操作
    close(fd);
    return 0;
}

上述代码中,先打开一个文件获取文件描述符fd,然后获取其当前标志并添加O_NONBLOCK标志,重新设置文件描述符的标志,使其变为非阻塞模式。之后可以在代码中进行非阻塞的I/O操作。最后关闭文件描述符。