linux库函数源码分析
文章平均质量分 72
Mrpre
??
展开
-
netlink 读取数据流程
前言本篇缘起是我要实现类似ss -i 的功能,通过netlink获取系统中的所有socket信息代码如下//发送tcpdiag的数据sendto(netlinkdf, msg,...)//sleep足够时间,使得内核处理//因为每次都读取少部分数据,以为内核没来得及处理sleep(10)char buffer[10000]len = recvfrom(buffer, sizeof(buffer), 0);上面流程中,recvfrom 返回的字节大小,小于buffer大小,理应我们认为原创 2022-04-23 21:23:32 · 1227 阅读 · 0 评论 -
setcontext getcontext makecontext swapcontext
Linux上下文切换以及协程 上下文切换,听起来虚无缥缈,什么是上下文,切换又是指的是什么?其实上下文就可以理解为一个进程所运行的相关的寄存器值,即包括sp/bp/pc等值,换句话说,一个上下文,就是包括了能够恢复进程运行所需要的所有必要的东西。所谓的切换, 那是多进程的操作系统必要的功能,一个CPU能够运行多个进程(看起来),那么必然要在多个进程之间不停的切换,A切换到B时,必...原创 2017-12-03 10:02:48 · 3264 阅读 · 3 评论 -
调用malloc时发生了什么(1) - brk与sbrk
调用malloc时发生了什么这或许是老生常谈的问题,也是面试中经常碰到的问题,有人简单的几句话就回答完了,有人却能大谈特谈。疑问进程的堆栈结构malloc是否会占用内存malloc对应的系统调用malloc返回的地址free函数干了什么一般,我们在需要申请内存的时候,需要执行malloc(),分配内存,需要注意的是,malloc()是glibc函数,其实际对应的系统原创 2018-01-13 21:22:00 · 4684 阅读 · 0 评论 -
pipe函数内核实现
pipe源码分析本文基于linux kernel 4.13 分析,与通用的2.6差距较大。请读者自行甄别本文的特性,是否符合自己当前环境。本文要解决的问题1:pipe源码分析2:pipe大小限制3:如果没有读(写)端了,那么我写(读)操作会发生什么。父子进程之间通信,首先想到的是pipe函数,pipe函数返回2个fd。通常原创 2017-12-09 17:32:10 · 4413 阅读 · 0 评论 -
调用malloc时发生了什么(2) - sys_brk函数与VMA
调用malloc时发生了什么(2) - sys_brk函数在上一篇中我们讲过,malloc实际调用了brk函数完成堆的分配,也了解了进程的内存布局。现在我们来看看,进程的内存布局到底是怎么实现的。具体如何堆指针增加减少的。增加减少,堆进程的影响是什么?一系列的问题等着我们去解决。sys_brk函数(去掉了与本篇无关的代码)SYSCALL_DEFINE1(brk, unsigned原创 2018-01-20 17:24:00 · 1170 阅读 · 2 评论