面试题答案
一键面试- 设置文件描述符为非阻塞模式的步骤:
- 使用
fcntl
函数来操作文件描述符的标志。 - 首先通过
fcntl
获取文件描述符当前的标志,然后添加O_NONBLOCK
标志,最后再通过fcntl
设置新的标志。
- 使用
- 代码示例:
#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操作。最后关闭文件描述符。