fcntl函数

fcntl 是一个用于控制文件描述符行为的系统调用,它可以获取或修改文件描述符的状态标志(如读写模式、追加模式、是否非阻塞等)。在网络编程中最常见的用法是通过 F_GETFL 读取当前状态标志,再结合位运算(如 flags | O_NONBLOCK)使用 F_SETFL 设置新的标志,从而将 socket 设置为非阻塞模式。非阻塞模式是实现 epoll、Reactor 等高并发事件驱动模型的基础,因为它可以避免线程在 I/O 操作上被卡住,使程序通过事件通知机制来处理数据读写。
void TcpClient::setNonBlocking(int fd) {
int flags = ::fcntl(fd, F_GETFL, 0);
if (flags >= 0) {
::fcntl(fd, F_SETFL, flags | O_NONBLOCK);
}
}

posted @ 2026-03-29 11:35  cyusouyiku  阅读(4)  评论(0)    收藏  举报