对libpq中运用 select()函数的理解

简介:
src/test/examples/testlibpq2.c 中,有如下一段代码:

复制代码
sock = PQsocket(conn);                                
                                
FD_ZERO(&input_mask);                                
FD_SET(sock, &input_mask);                                
                                
if (select(sock + 1, &input_mask, NULL, NULL, NULL) < 0)                                
{                                
    fprintf(stderr, "select() failed: %s\n", strerror(errno));                            
    exit_nicely(conn);                            
}
......
复制代码
经过查阅网络资料,看到解释如下:

FD_ZERO(fd_set   *fdset); 
文件描述符集合初始化

FD_SET(fd_set   *fdset); 增加一个新的文件描述符。

int   select
(int   maxfd,fd_set   *rdset,fd_set   *wrset,fd_set   *exset,struct   timeval   *timeout);    

参数maxfd 是需要监视的最大的文件描述符值+1;
 rdset, wrset, exset 
分别对应于需要检测的 可读文件描述符的集合,可写文件描述符的 集合 及 异常文件描述符的集合。
struct timeval
结构用于描述一段时间长度,
如果在这个时间内,需要监视的描述符没有事件发生则函数返回,返回值为0。

从代码的上下文看,select()并非是什么非阻塞,而是要休眠,直至操作系统发现文件描述符集合变化,
把调用 select()函数的进程唤醒。








本文转自健哥的数据花园博客园博客,原文链接:http://www.cnblogs.com/gaojian/archive/2012/07/13/2590013.html,如需转载请自行联系原作者
目录
相关文章
|
域名解析 运维 网络协议
Linux命令行全景指南:从入门到实践,掌握命令行的力量
Linux命令行全景指南:从入门到实践,掌握命令行的力量
345 0
|
测试技术 API
修改bug引入更多bug怎么办?
修改bug引入更多bug怎么办?
281 0
|
网络协议 Linux iOS开发
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
568 1
|
缓存 算法 安全
C++ std::chrono库使用指南 (实现C++ 获取日期,时间戳,计时等功能)(三)
C++ std::chrono库使用指南 (实现C++ 获取日期,时间戳,计时等功能)
559 1
|
C++ 容器
掌握C++定时器:构建自己的定时器的分步指南
本文是一份详细的、分步指南,旨在帮助读者掌握C++定时器的构建过程。通过本文,读者将了解到什么是定时器,以及为什么需要自己构建定时器而不仅仅使用标准库中的函数。文章将从基础开始,介绍了利用C++的基本语法和操作符创建一个简单的定时器的步骤。随后,文章逐渐深入,介绍了如何优化定时器的性能,包括减少延迟和提高精度。
903 0
|
12月前
|
编解码 语音技术 内存技术
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
《FFmpeg开发实战:从零基础到短视频上线》一书中的“5.1.2 把音频流保存为PCM文件”章节介绍了将媒体文件中的音频流转换为原始PCM音频的方法。示例代码直接保存解码后的PCM数据,保留了原始音频的采样频率、声道数量和采样位数。但在实际应用中,有时需要特定规格的PCM音频。例如,某些语音识别引擎仅接受16位PCM数据,而标准MP3音频通常采用32位采样,因此需将32位MP3音频转换为16位PCM音频。
298 0
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
|
10月前
|
人工智能 数据处理 数据安全/隐私保护
销售易CRM:深耕大中型企业市场的标杆
在中国企业级CRM市场,销售易凭借对中国企业数字化转型需求的深刻理解、技术创新能力、丰富的行业经验和卓越的实施服务能力,赢得了三一、柳工、锦江酒店等大型企业的青睐。其本土化服务和持续创新,使其成为企业数字化转型的可靠伙伴。
|
安全 数据处理 数据格式
深入浅出:FFmpeg 音频解码与处理AVFrame全解析(三)
深入浅出:FFmpeg 音频解码与处理AVFrame全解析
496 0
|
人工智能 自然语言处理 Java
SemanticKernel:添加插件
SemanticKernel:添加插件
199 0
SemanticKernel:添加插件
|
编解码 测试技术
ffmpeg中的时间单位以及时间转换函数(av_q2d av_rescale_q)
ffmpeg中的时间单位以及时间转换函数(av_q2d av_rescale_q)
471 0