glibc:fd_set机制
目录
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机制相关推荐
- Glibc堆块的向前向后合并与unlink原理机制探究
i春秋作家:Bug制造机 原文来自:Glibc堆块的向前向后合并与unlink原理机制探究 玩pwn有一段时间了,最近有点生疏了,调起来都不顺手了,所以读读malloc源码回炉一点一点总结反思下. U ...
- Linux下glibc内存管理
整理的参考文献,记不清了 1 背景简介 出现疑似"内存泄露"问题: malloc申请的内存,free释放以后没有归还操作系统,比如内存模块占用的内存为10GB,释放内存以后,通过T ...
- 2万字|30张图带你领略glibc内存管理精髓(因为OOM导致了上千万损失)
由于此文涉及内容较多,且malloc和free的流程图太大,导致被压缩,需要本文pdf或者高清 原图的,请关注公众号[高性能架构探索],也可以后台回复[pdf],获取计算机必备经典书籍 前言 大家好, ...
- Linux堆内存管理深入分析
0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞利用两种.国内关于栈溢出的资料相对较多,这里就不累述了,但是关于堆溢 ...
- C++ Learn Note
C++ 的筆記部分 基礎部分 C++ 可變範本參數 在C++11之前,類範本和函數範本只能含有固定數量的範本參數.C++11增強了範本功能,允許範本定義中包含0到任意個範本參數,這就是可變參數範本 / ...
- [转载]Linux 线程实现机制分析
自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性.效率.本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads ...
- pwn with glibc heap(堆利用手册)
前言 对一些有趣的堆相关的漏洞的利用做一个记录,如有差错,请见谅. 文中未做说明 均是指 glibc 2.23 相关引用已在文中进行了标注,如有遗漏,请提醒. 简单源码分析 本节只是简 ...
- io多路复用的原理和实现_彻底理解 IO 多路复用实现机制
本文作者:何建辉(公众号:org_yijiaoqian) 点赞再看,养成习惯,微信搜一搜[一角钱技术]关注更多原创技术文章.本文 GitHub org_hejianhui/JavaStudy已收录,有 ...
- Select()系统调用及文件描述符集fd_set的应用
在网络程序中,一个进程同时处理多个文件描述符是很常见的情况.select()系统调用可以使进程检测同时等待的多个I/O设备,当没有设备准备好时,select()阻塞,其中任一设备准备好时,select ...
最新文章
- ipa解包打包工具_7步!教你轻松搞定ios重签ipa包
- 验证 Swarm 数据持久性 - 每天5分钟玩转 Docker 容器技术(104)
- canvas基础-绘制矩形(1)
- C++ 宏、范型和RTTI 浅析
- 数学建模学习笔记(四)——拟合算法
- C++工作笔记-调试release版的dll
- 滑动窗口解决最小子串问题 leetcode3. Longest Substring Without Repeating Characters
- 机器学习算法中的过拟合与欠拟合(转载)
- python制作词云图设置停用词,Python生成词云图
- 面试官:有没有比读写锁更快的锁?
- h5微信f分享链接给对方获取对方手机号_怎么加回微信删除的人?偷偷恢复,亲测有效!...
- 托管代码 非托管代码
- 用户需求规格说明书模板,介绍
- 网管第一课——网络组建与管理 目录
- 便宜的虚拟主机可以使用吗?
- 2021年Facebook广告投放的9条建议
- 【历史上的今天】5 月 21 日:Simula 67 发布;微软推出 Xbox One;计算机先驱诞生日
- 2021 牛津大学:Recent Advances in Reinforcement Learning in Finance
- 剧白白 v3.1.1 修改版 (强大的最新影视在线平台)
- layui框架学习(13:辅助元素)