目录

msg_set.h

使用


msg_set.h

#ifndef _MSG_SET_H
#define _MSG_SET_H/* The msg_set member is required to be an array of longs.  */
typedef long int __msg_mask;/* Number of descriptors that can fit in an `msg_set'.  */
#define __MSG_SETSIZE       256/* It's easier to assume 8-bit bytes than to get CHAR_BIT.  */
#define __NMSGBITS  (8 * (int) sizeof (__msg_mask))
#define __MSG_ELT(d)    ((d) / __NMSGBITS)
#define __MSG_MASK(d)   ((__msg_mask) (1UL << ((d) % __NMSGBITS)))/* msg_set for select and pselect.  */
typedef struct
{/* XPG4.2 requires this member name.  Otherwise avoid the namefrom the global namespace.  */
#ifdef __USE_XOPEN__msg_mask msgs_bits[__MSG_SETSIZE / __NMSGBITS];
# define __MSGS_BITS(set) ((set)->msgs_bits)
#else__msg_mask __msgs_bits[__MSG_SETSIZE / __NMSGBITS];
# define __MSGS_BITS(set) ((set)->__msgs_bits)
#endif
} msg_set;/* We don't use `memset' because this would require a prototype andthe array isn't too big.  */
#define __MSG_ZERO(s) \do {                                       \unsigned int __i;                                  \msg_set *__arr = (s);                             \for (__i = 0; __i < sizeof (msg_set) / sizeof (__msg_mask); ++__i)       \__MSGS_BITS (__arr)[__i] = 0;                         \} while (0)
#define __MSG_SET(d, s) \((void) (__MSGS_BITS (s)[__MSG_ELT(d)] |= __MSG_MASK(d)))
#define __MSG_CLR(d, s) \((void) (__MSGS_BITS (s)[__MSG_ELT(d)] &= ~__MSG_MASK(d)))
#define __MSG_ISSET(d, s) \((__MSGS_BITS (s)[__MSG_ELT (d)] & __MSG_MASK (d)) != 0)/* Access macros for `msg_set'.  */
#define MSG_SET(fd, fdsetp)     __MSG_SET (fd, fdsetp)
#define MSG_CLR(fd, fdsetp)     __MSG_CLR (fd, fdsetp)
#define MSG_ISSET(fd, fdsetp)   __MSG_ISSET (fd, fdsetp)
#define MSG_ZERO(fdsetp)        __MSG_ZERO (fdsetp)#endif /* _MSG_SET_H */

使用

#include <stdio.h>#include "msg_set.h"int main()
{msg_set set;printf("%d\n", sizeof(long int));MSG_ZERO(&set);MSG_SET(0, &set);printf("%d\n", set.__msgs_bits[0]);MSG_CLR(0, &set);printf("%d\n", set.__msgs_bits[0]);return 0;
}

glibc:fd_set机制相关推荐

  1. Glibc堆块的向前向后合并与unlink原理机制探究

    i春秋作家:Bug制造机 原文来自:Glibc堆块的向前向后合并与unlink原理机制探究 玩pwn有一段时间了,最近有点生疏了,调起来都不顺手了,所以读读malloc源码回炉一点一点总结反思下. U ...

  2. Linux下glibc内存管理

    整理的参考文献,记不清了 1 背景简介 出现疑似"内存泄露"问题: malloc申请的内存,free释放以后没有归还操作系统,比如内存模块占用的内存为10GB,释放内存以后,通过T ...

  3. 2万字|30张图带你领略glibc内存管理精髓(因为OOM导致了上千万损失)

    由于此文涉及内容较多,且malloc和free的流程图太大,导致被压缩,需要本文pdf或者高清 原图的,请关注公众号[高性能架构探索],也可以后台回复[pdf],获取计算机必备经典书籍 前言 大家好, ...

  4. Linux堆内存管理深入分析

    0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞利用两种.国内关于栈溢出的资料相对较多,这里就不累述了,但是关于堆溢 ...

  5. C++ Learn Note

    C++ 的筆記部分 基礎部分 C++ 可變範本參數 在C++11之前,類範本和函數範本只能含有固定數量的範本參數.C++11增強了範本功能,允許範本定義中包含0到任意個範本參數,這就是可變參數範本 / ...

  6. [转载]Linux 线程实现机制分析

    自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性.效率.本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads ...

  7. pwn with glibc heap(堆利用手册)

    前言 ​ 对一些有趣的堆相关的漏洞的利用做一个记录,如有差错,请见谅. ​ 文中未做说明 均是指 glibc 2.23 ​ 相关引用已在文中进行了标注,如有遗漏,请提醒. 简单源码分析 ​ 本节只是简 ...

  8. io多路复用的原理和实现_彻底理解 IO 多路复用实现机制

    本文作者:何建辉(公众号:org_yijiaoqian) 点赞再看,养成习惯,微信搜一搜[一角钱技术]关注更多原创技术文章.本文 GitHub org_hejianhui/JavaStudy已收录,有 ...

  9. Select()系统调用及文件描述符集fd_set的应用

    在网络程序中,一个进程同时处理多个文件描述符是很常见的情况.select()系统调用可以使进程检测同时等待的多个I/O设备,当没有设备准备好时,select()阻塞,其中任一设备准备好时,select ...

最新文章

  1. ipa解包打包工具_7步!教你轻松搞定ios重签ipa包
  2. 验证 Swarm 数据持久性 - 每天5分钟玩转 Docker 容器技术(104)
  3. canvas基础-绘制矩形(1)
  4. C++ 宏、范型和RTTI 浅析
  5. 数学建模学习笔记(四)——拟合算法
  6. C++工作笔记-调试release版的dll
  7. 滑动窗口解决最小子串问题 leetcode3. Longest Substring Without Repeating Characters
  8. 机器学习算法中的过拟合与欠拟合(转载)
  9. python制作词云图设置停用词,Python生成词云图
  10. 面试官:有没有比读写锁更快的锁?
  11. h5微信f分享链接给对方获取对方手机号_怎么加回微信删除的人?偷偷恢复,亲测有效!...
  12. 托管代码 非托管代码
  13. 用户需求规格说明书模板,介绍
  14. 网管第一课——网络组建与管理 目录
  15. 便宜的虚拟主机可以使用吗?
  16. 2021年Facebook广告投放的9条建议
  17. 【历史上的今天】5 月 21 日:Simula 67 发布;微软推出 Xbox One;计算机先驱诞生日
  18. 2021 牛津大学:Recent Advances in Reinforcement Learning in Finance
  19. 剧白白 v3.1.1 修改版 (强大的最新影视在线平台)
  20. layui框架学习(13:辅助元素)

热门文章

  1. Hanlp得到语义相似度的方法
  2. leetcode题解162-寻找峰值
  3. django模型查询
  4. 关于WS-PSNR、S-PSNR、CPP-PSNR
  5. 【转】ListT和ILIstT的区别
  6. [JS调用]automation服务器不能创建对象
  7. react使用antd实现日期与时间的不可选定
  8. HTML怎么显示折后价格,HTML打折计算价格实现原理与脚本代码
  9. opengl显示英文_OpenGL-Using Shaders(使用Shader)
  10. linux配置apache不管用,Linux中apache配置文件详解