select函数使用时应注意的问题
问题一:fd_set和timeval的重置。
select函数的使用一般分为以下几步
1、FD_ZERO(fd_set*);
2、FD_SET(int fd,fd_set*);
3、int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
4、FD_ISSET(int fd, fd_set *set);
仔细观察以上函数会发现,fd_set参数和timeval参数传递的全是其变量指针。然而,经过实验四个函数均会通过指针对fd_set和timeval的最初值进行更改,因此,在每次调用select函数之前必须对fd_set和timeval进行重置,使二者保持正确的初始值。
问题二:select函数中第一参数(int n)的设置。
该参数代表的是select函数监听描述字集的最大值即最大位数,使用的是开区间。我们知道使用FD_SET是对描述字集进行设置,而实际上的操作是对于描述字集fd_set的对应位置1,例如int fd = 5,则执行FD_SET宏后,fd_set描述字的第五位置1,即***10000;若此时,fd_set不足5位则无法完成fd_set描述字集的正确注册,因此,每次调用select函数之前都要保证n大于描述字集fd_set的最大位数,即最大位数+1。
综上所述,使用select函数,在每次进行描述字集注册,即调用select函数之前一定要注意fd_set、timeval和n的重置。
select函数使用时应注意的问题相关推荐
- linux应用参数 冒号,Lua-面向对象中函数使用时冒号(:)和点(.)的区别
Lua-面向对象中函数使用时冒号(:)和点(.)的区别,我们先来看一段简单的代码: local Animal ={}functionAnimal:Eat( food )print("Anim ...
- memmove函数使用时注意的问题
首先,来了解一下memmove函数的声明类型,Linux c中的定义如下: #include <string.h> void *memmove(void *dest, const void ...
- 关于ADAMS中AZ函数使用时的一些心得
今天做仿真时,发现使用AZ函数时的一些注意事项: 一: 其中MARKER_1需要是作用part(或者说受力运动的那个part)上的点,MARKER_33是与作用part相连的那个pa ...
- Matlab imshow(f,G)函数使用时出现错误
imshow(f,G)使用时出现错误 ① imshow(h,128) 错误使用 imshow>preParseInputs (line 467) IMSHOW 语法无效. 出错 imshow ( ...
- php crc32 作用,php的crc32函数使用时需要注意的问题(不然就是坑)
前几天写了一个分表程序,用的hash算法是crc32.分表的函数如下: 复制代码 代码如下: function _getHash($username) { $hash = crc32($usernam ...
- 一个memset函数使用时的坑
平时使用memset函数都是用来初始化字符串,从来没有注意过它具体是怎么实现的,最近无意中发现原来这个函数里面还是有坑的. 我尝试用它来初始化整型数组 int array[10]; memset(ar ...
- STL : List使用时应注意的问题
这篇文章所述只是本人遇到的问题,仅供参考. #include<list> #include<iostream>using namespace std;class Foo { p ...
- GetMessage()函数使用时的注意
GetMessage()函数是一个很常见的函数,如果使用SDK写过Windows程序的话,那么就更不陌生,该函数的返回值值得注意的地方,因为最近在看Win32汇编的书,书中提到了这个函数.但是发现对于 ...
- strstr(str1,str2)函数使用时注意事项
可能有的人还没听过strstr函数,个人认为这个一个很实用的函数,strstr(str1,str2) 函数是字符串处理函数之一,位于头文件 "string.h"中.对于处理字符串的 ...
最新文章
- Guava学习笔记:缘起
- php怎么删除多条,php 用checkbox一次性删除多条记录的方法
- Http协议中的各种长度限制总结
- 【转】Unity3d:读取FBX中的动画
- SVM 实现与代码(转)
- Python 中各种imread函数的区别与联系
- (四)boost库之正则表达式regex
- RuoYi-Cloud 部署篇_02(linux环境 mysql+nginx版本)
- 人力资源管理系统、OA、行政管理系统、考勤管理、资产管理、车辆管理、绩效管理、员工管理、招聘、入职、离职、转正、加班、调休、企业OA系统、axure原型、rp源文件、web端后台管理原型、高保真原型
- OpenStack icehouse系列之问题处理
- shell script if嵌套for循环脚本
- 最赚钱H5游戏《大天使之剑H5》公测24天流水破亿!
- BufferedWriter详解
- Jeremy Bearimy CodeForces - 1281E 贪心
- 实现SSH的无密码自动登录
- 利用curl命令访问Kubernetes API server
- Linux挖矿病毒事件应急响应演练(dbused木马)
- 谜题79: 这是狗的生活
- cocos creator麻将教程系列(六)—— 达达麻将的游戏流程
- 谷歌原版bert模型tf转pytorch命令