
C
grey_csdn
这个作者很懒,什么都没留下…
-
原创 571_一加手机7上尝试搭建一个简单的C开发环境
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 前面,在手机上安装了termux的环境。尝试安装了一批软件,这一次比较幸运完成了我一直想安装的emacs。看了一下,版本还是挺高的。 接下来,尝试安装下spacemacs,我直接把我自己以前用的文件包放进来。 解压缩,待会清除掉在windows上编译的elc文件,直接启动。 space...2021-03-07 15:36:2012
0
-
原创 567_linux内核学习_signal.c文件的泛读与分析
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 这次,把signal.c的文件全都看一下,粗略泛读。后面应该也是这么个模式,不会像之前分的那么细了。 这一部分,其实之前是看过了的。 这部分,前面也看过了。主要是信号挂起的处理,我觉得技巧点应该是在于形参处理与寄存器操作的结合。 这两个函数,从命名看的话我们需要站在内核的角度来看。存储...2021-03-07 11:20:2321
0
-
原创 566_linux内核学习_信号挂起函数分析
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 看一下信号挂起函数的设计: 首先是函数的注释说明。 接下来看看函数实现。 关于函数的调用,在代码中搜索,其实又回到了汇编代码的那一部分。 还是通过对这个系统调用表的处理来实现的。 感觉上,这里面的寄存器的信息获取,很可能是把函数的参数获取到了...2021-03-07 11:16:0430
0
-
原创 565_C语言中关于减号操作符使用的一点小细节以及曾经的误解
全部学习汇总: https://github.com/GreyZhang/c_basic 看到了一段代码: 上面这段代码来自于linux早期的内核代码,而让我突然间觉得不适应的是71行,在一个宏定义前面直接增加了一个符号。这样,合理吗?当然是合理的,只是我自己没有这么用过而已。 其实,我们可以缩减一下代码,做一个简单的demo。 也就是这个样子了,做一个编译测试: 其实,看到结果...2021-03-06 16:25:5030
0
-
原创 564_linux内核学习_信号掩码的获取以及设置
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 这一次开始看信号的设计模块文件,signal.c。这个模块的设计,用到了很多POSIX的接口设计。而信号的一些数据结构的定义,其实是在POSIX相关的库文件里面提供的。 关于信号的一些设计,主要是在11行包含的这个头文件里面进行的声明或者定义。 接下来,先看两个最简单的函数,作为这个模块学习的一个开篇。...2021-03-06 14:24:3519
0
-
原创 560_linux内核学习_sched.c文件sched_init函数分析
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 今天看看这个sched.c的文件中的sched_init函数,且不说能够收获什么,看完这个函数肯定能够让我松一口气。看完这个,这个文件的分析学习也就到此为止了。 首先应该是有一个数据类型应该是先了解看看: 应该说是一个结构体而不是一个数据类型了,具体的定义如下: 这里定义了一个数据类型,其...2021-03-02 00:11:1165
0
-
原创 558_linux内核学习_几个获取进程ID的函数
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 继续看sched.c,这次看几个简单的函数。看完结束今天的学习,眼看这个文件终于快到底了。(哭笑) 直接看代码吧! 其实,最后一个不是这个功能相关的,但是看着似乎不是很麻烦,一起打包了。关于进程ID、父进程ID、用户ID、有效用户ID、用户组ID、有效用户组ID。这些功能的获取都是很简单的,其实就是一个结构体的成...2021-02-28 22:36:0213
0
-
原创 557_linux内核学习_sys_alarm函数的功能以及分析
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 继续之前么有分析完的内核文件sched.c,这一次看一个比较简单的函数sys_alarm。源代码如下: 接下来,按照初步的理解做一个注释: 其实,这里就是一个alarm数值的获取判断。 继续往下,看看这个函数的调用。windows的emacs有点小慢,卡顿,我试试切换WSL的模式。...2021-02-28 22:12:2917
0
-
原创 553_linux内核学习_调度定时器与软盘
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux继续看sched.c文件的设计,这次看一部分软盘相关的功能。我觉得这部分功能可能多少脱离了我想了解的内核调度等相关的功能,因此快速看看代码接口过一下。首先看注释,其实这里也说了这不是内核的一部分,放在这里主要是考虑这个实现方式的简单。这里学到了一点,或许,以后我得关注一下临界保护等信息。最后的返回值,应该出除了初始化的状态来调度之外,其他的数值都是相对确定的。这个2021-02-28 13:45:4531
0
-
原创 546_linux内核学习_sys_pause函数分析
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux继续分析sched.c文件。这次看一下sys_pause函数。具体的实现如下:这个函数实现的功能其实就是切换了任务状态然后执行调度,而且这个返回值感觉上用处不大。因为返回值的情况其实只有一种。接下来看看函数的调用情况,整个工程中调用如下:内容还是比较少的,有些纯粹是声明。真正有分析必要性的应该有第二条,这个涉及到一个之前就接触过的表。还要就是signal.c文件。先看2021-02-24 21:31:2443
0
-
原创 544_linux内核学习___sleep_on函数功能分析
全部学习汇总:https://github.com/GreyZhang/little_bits_of_linux 这次看一下__sleeo_on函数。按照我的初步理解,我先做了一下注释说明如下: 接下来,看看这个函数的调度。 这个函数一共有两个调用的位置,接下来逐个看一下。 两个调度的信息全都在上面了,其中的一个是可中断的睡眠,另一个是睡眠。从这里看,还是没有找到调度的源头。继续找这两个函数的调用情况。...2021-02-21 20:47:5230
0
-
原创 543_sys_pause函数功能以及调用分析
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux sched.c中有一个函数:sys_pause 函数的内容比较简单,就是切换了一下当前任务的状态,然后执行调度。 函数只有在这里调用了一下,看起来似乎是信号处理的过程中的功能支持。 这个函数还在一个头文件中被放进了一个数组。 相应的参数被用来计算一个数值大小,应...2021-02-21 14:56:1919
0
-
原创 538_linux内核学习_早期linux内核支持的信号种类
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 之前做过一个信号相关的代码分析,当时的笔记:https://greyzhang.blog.csdn.net/article/details/113834776 现在突然间想起来,前几天学习linux C编程的时候看到过linux支持的信号是64种,如果是拿一个32bit的数每一位代表一个可能有问题。但是,那时候的CPU肯定不会是64bi...2021-02-17 22:04:5517
0
-
原创 537_linux内核学习_schedule函数分析
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 这次看一个重量级的函数,schedule。为了能够理解的更透彻,这次我“请来了”Source Insight,一个更能理解代码的工具。 看起来,作者还是很自信这份代码的质量的。或许,这段代码的可移植性也是非常棒的吧! 这个循环,先不看具体的内容,先看循环依据。这个从字面意思看,应该是想循环遍历所有的任务。而处...2021-02-17 21:40:5826
0
-
原创 536_linux内核学习_显示任务状态函数分析
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 继续分析sched.c,今天再看一个函数。 这个函数其实可分析的信息不多,它就是输出了一下每一个任务的状态。采用到的函数之前已经简单看过了。 用到的一个宏定义在这里,数值为64。也就是说,现在监控的任务数目为64个。从名称看,这个数目很可能是我看的这个版本的内核所能够支持的最大的任务数。...2021-02-17 19:24:3221
0
-
原创 535_linux内核学习_printk函数以及终端操作
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 这一次看一下printk。之前在其他地方看到过printk,当时看到的printk是把打印方式转到了串口上。刚刚看到的内核代码中出现了这个函数,接下来看看这个函数的实现。 我看到的函数调用是在这里,用到很多次。接下来,看看这个函数的实现。 本身的功能不用说,肯定是类似printf的。这里,先利用vsprint...2021-02-17 18:32:4720
0
-
原创 534_linux内核学习_show_task函数task_struct结构体信息分析
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 这次,把sched.c文件的内容分析正式开个头吧! 从注释描述看,这个也是内核部分的核心代码。 而这几行代码的功能前面已经做了分析以及测试。 这里,打印了任务的一些属性,同时还检查了一部分存储信息。从提示信息看,存储信息是检查了任务的堆栈空间。为了能够更好理解一个任务的信息,需要查看一...2021-02-17 17:23:2020
0
-
原创 533_linux内核学习__BLOCKABLE功能分析
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 阅读linux内核源代码,看到了sched.c文件。这是内核中比较核心的一个功能了,我可以做一个精读。这次先来看看_BLOCKABLE的功能。 _BLOCKABLE在这个代码中其实用到的位置也只有一个,用于处理信号。 关于这部分的代码实现如下: 相应的实现分析我也在注释中写了,接下来做一个测试...2021-02-17 15:40:2718
0
-
原创 532_linux内核学习_mktime.c文件分析
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 就昨晚上用了一下VS Code,还是切换回了emacs。我觉得,现在人懒了,鼠标能够不用的话也就不去用了。emacs在浏览代码的时候正好,只是现在看了,语义分析的效果稍微差一点,就当是自己锻炼一下文本阅读能力了。 这一次看看mktime.c文件。 这段注释很有意思,我加了一下我看代码时候的一些想法。我觉得,有这样...2021-02-17 12:29:1028
0
-
原创 531_linux内核学习_sys_call.s文件分析
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 打算用一阵子VS Code,看看是不是能够适应。单纯的看代码而不是编辑,我觉得VS Code获取还有一些好过emacs的优势。 这次看的是sys_call.s,还是一个汇编代码,快速过一下。 包含了系统调度的底层功能,还包含了定时器的中断处理函数。除此之外,还有一些软盘的中断。这份代码中有信号的处理,这个是我有点...2021-02-16 21:45:0311
0
-
原创 529_linux内核学习_trap.c代码浏览以及分析
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 继续逐个分析手中的代码文件,我看了下现在手里的文件连同配置文件和makefile在内也不过100多个,做一个粗略的代码阅读分析应该还是有希望有可能的。 接下来,看看trap.c的代码。这个文件的位置如下: 从大神的注释来看,其实这个也算不上是很完善的trap处理,更多的其实是调试辅助。需要配合asm.s...2021-02-16 18:25:39111
0
-
原创 528_linux内核学习_内核进程启动分析
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 最近补了一点基础的概念,之前完全看不懂的代码似乎有看懂了一丢丢。尝试做一个补充理解笔记。 这里,增加了一个理解说明,关于fork。之前,这个函数功能不了解,而这部分没有源代码存在于库文件,因此也没去做深入的分析。现在大概看懂了,其实这里是fork创建了一个子进程。而子进程中,执行了init函数。 在我手中这份内核...2021-02-16 17:49:1432
0
-
原创 527_linux内核学习_asm.S文件浏览
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 前面学习的时候,分析了几段汇编代码之后我基本决定对汇编代码的精读了。这部分,我很可能在未来的工作或者生活学习中用到的很少,而且通用性并不是很好。因此,我觉得学习的重点应该放在可以执行好的C代码上面。 关于汇编代码,我觉得跟读一个目录一般看看框架、注释以及关键字其实也就差不多了。接下来,按照这个思路看看asm.S这个文件,我在其中增加了部...2021-02-15 20:28:5868
0
-
原创 526_linux C编程IPC有名管道
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 感觉上,有名管道就是一个文件交换的方法,只是加了一些阻塞处理。不过,这部分阻塞的设计不是用户程序中说了算的,而是内核处理的。 有名管道的创建,使用mkfifo。读写跟普通管道处理差不多,接下来做一个测试。 这是一个读管道的进程,同时负责创建有名管道。 这是一个写管道的进程。...2021-02-15 16:33:2459
0
-
原创 525_linux C编程中IPC管道
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 进程间通信的方式还有一种方式是管道,而在最初折腾linux的时候这属于我早期使用的功能之一。不过,在C编程方面接触的还是很少。了解一下基础的C编程,对我了解linux系统的部分运行机理应该会有一定的帮助。 pipe函数的功能是建立管道。 使用的时候需要包含头文件 #include<unistd.h>...2021-02-15 15:19:5589
0
-
原创 524_linux C编程中的IPC signal
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux linux中进程间通信,简称IPC。主要存在以下几种方式:管道、FIFO(有名管道); 消息队列; 共享内存; 信号量; 信号; 套接字(主要是用于不同机器之间的通信);这次,先看看比较常见的信号方式。linux支持的信号可以通过kill命令来查看。 查看一下linux支持的信号种类如下: 一...2021-02-15 12:20:2757
0
-
原创 522_linux C编程exec函数族
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 说起exec,其实不是一个函数,而是一个函数族。我参考了一下网络上的文章简单学习了一下,顺便敲了两行代码测试了其中的两个函数。 exec函数族包括6个函数:int execl(const char *path, const char *arg, ...);int execlp(const char *file, const ch...2021-02-14 20:59:3426
0
-
原创 521_linux C编程中C语言实现命令行参数
全部学习汇总: https://github.com/GreyZhang/c_basic 我把这次小结放到了基础的c语言知识小结中,因为这部分的确是语言元素居多一点,知识涉及到了部分环境问题。 在shell中,经常会用到cat test.txt这样的命令,其中cat是命令行命令,而test.txt是传入参数。那么,如何用C语言实现这样的命令设计呢?如下是一个简单的小例子: 代码编译运行效果: 从结果看,...2021-02-14 18:14:5542
0
-
原创 520_linux C编程waitpid函数
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 前面已经用过了wait函数,其实waitpid只是一个详细配置的版本,使用更加灵活。个人理解,wait其实算是waitpid的一组表现的合集。 waitpid的原型: pid_t waitpid(pid_t pid,int *status,int options); 其中,第二个参数与wait中的传入参数是一样的。w...2021-02-14 17:35:5724
0
-
原创 519_linux C编程wait函数进阶
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 前面简单用了一下wait函数,暂时看到了它对父进程的阻塞效果。关于wait函数,其原型如下: int wait(int *status) 返回值:返回值是一个int类型,如果成功则返回子进程的pid,如果失败返回值是-1。 传入参数: int指针类型,指向一个int存储区域用于存储子进程返回时候的...2021-02-14 16:50:4648
0
-
原创 518_linux C编程中的wait函数
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 前面,简单学习了fork函数。再测试fork函数的时候,使用了一个sleep函数来延时,以在较大程度上让子进程先运行结束。那么,有没有什么方式可以保证子进程先执行完父进程再执行呢?其实是有的,这就是这次要简单测试的wait函数。 之前的代码修改如下: 代码编译运行结果: 从输出结果看,第一...2021-02-14 15:34:4727
0
-
原创 517_linux C编程中的fork函数
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 今天看一下fork函数,在C编程中这是我距离linux内核最近的一次吧!之前,linux的很多东西其实都是只停留在网络文章甚至说新闻的层面,没有任何实操。 前阵子我还在看linux早期的内核代码,但是看着看着开支转向了先了解一部分linux C编程。因为看代码的过程中,我发现需要补充的东西太多。 关于fork,其实是...2021-02-14 14:17:4334
0
-
原创 516_Linux C编程中的sleep函数
全部学习汇总: https://github.com/GreyZhang/c_basic 其实,说道linux C编程的时候我们更多的时候应该是指编程环境以及可以利用的库等多层概念。而说道标准的库或者接口,有些也是跟unix的环境是相同的。这方面其实我不专业,只是在平时的学习或者工作中零星的遇到。 最近接触到了一个sleep函数,开始的时候就让我觉得有一点点“高级”。毕竟,类似的功能让一个嵌入式的C程序员来做的话,少不了又是各种定时器。...2021-02-13 22:04:2053
0
-
原创 508_汉明码权重
汉明码之前使用非常少,印象中第一次看到的时候我还在北京。那时候,工作变动但是自己感觉有一些迷惑,因为不觉得自己的能力有什么竞争力。自己之前的工作经验在PowerPC平台,而那时候我自己的的工作又是这个。为了谋生计,觉得这个平台的开发得一点点自己补上。那时候网上买了一本书,慢慢自己去啃读。就是从那本书,我看到了汉明码。当时自己看不懂,直接问了自己老同事。我都不记得当时给了我什么答案了,总之这个还是没弄明白是干啥的。最近再次遇到了,不过这次是通过看别人的代码。看到别人写了一个计算数值中数值为1的比特位,2021-01-27 21:21:0625
0
-
原创 506_linux内核学习_sprintf函数分析
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 前面看了vsprintf的实现,在代码中看到这个函数经过又一层封装变成了sprintf。之前看vsprintf的时候,其实看得也有点糊涂。其实,结合这个代码实现倒是有点理解了这个使用方式。 其实,vsprintf的部分参数确定其实正好是通过va_start来实现的。在vsprintf中,通过va_arg类似逐个遍历的方式处理每个参数...2021-01-12 21:19:5158
0
-
原创 505_linux内核学习_关于C语言函数的可变参数
全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 在main.c中有一个函数的定义如下: 关于代码,我做了一部分注释说明。这次用了SI来看代码,在语义分析解读上还是很有用的,这个1000块其实是还是很值的。 理解上面的代码,首先看看va_start。 相应的功能,我在代码中做了简单的说明。 接下来其实是需要vsprin...2021-01-11 23:04:2133
0
-
原创 500_C语言判断一个字符是否是数字
全部学习汇总: https://github.com/GreyZhang/c_basic 我之前使用C虽说很多年,基本都是嵌入式的驱动开发,各个库文件的使用极少。最近看的东西多少有一点点“跨界”,正好是一个复习之前基础知识的好机会。 Libc中有专门判断一个字符是否是数字的函数,在ctype的头文件中进行了声明。具体的声明如下: 我看linux的内核中也有一个相同的函数,而且从注释看就是为了不使用这个库函数而设计的。其实我有一...2021-01-11 21:32:3551
0
-
原创 499_C语言中的逗号运算符
全部学习汇总: https://github.com/GreyZhang/c_basic 虽然我现在已经做了多年的C程序员,但是现在看看别人的代码(我现在看的是Linux的内核代码)还是经常看到一些我一般不用的使用方法。总体看下来,倒让我觉得我的C语言还不算是很扎实。 今天通过实际的代码测试,看看逗号运算法的作用。 其实,大部分的功能基本上靠一段代码就可以测试说明,我写的测试代码如下: 9~12行的代...2021-01-11 21:30:13102
3
-
原创 482_C语言函数指针小结
全部学习汇总: https://github.com/GreyZhang/c_basic 近来团队中加入了几个新人,基础都一般。感觉似乎看到了最初的我,怕他们也跟我一样成长慢,这些简单的小知识帮他们梳理一下,而我自己也算是复习。 指针似乎会难住大批的初学者,而函数指针或许更加让大家迷惑。今天,简单做一下这个知识点的小结。 通常来说,使用的方法不过三个:1,定义一个函数类型,然后在此基础上定义一个指针变量; 2,直接定义一个函数指针...2020-12-16 20:40:2642
0
-
原创 481_C语言野指针
全部学习汇总: https://github.com/GreyZhang/c_basic 其实,我现在的开发工作中基本上遇不到野指针,因为我现在开发产品中基本上没有使用存储的分配和释放过程。当然,这是除了局部变量的使用之外。 野指针会存在什么常见的问题呢?通常,指针指向的内存空间可以进行存储的申请分配,但是通常来说分配还都会带着一个释放的过程。一般来说,为了保证软件的可靠,这个分配和释放都是成对的。如果一个指针通过存储的分配申请操作指向了一个位置,再...2020-12-15 21:31:1591
0