Linux系统编程&网络编程
文章平均质量分 96
将抽象化的概念具体化,深入学习Linux系统编程&网络编程方面的知识。
安然无虞
你好,我是安然无虞,2021年度博客新星Top2,新星计划·第三季C/C++赛道导师,C/C++优质创作者,阿里云特邀专家博主,比特社区创建者,小比特,大梦想。
展开
-
Linux系统编程·环境变量
所以,环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,比如我们在编写C/C++代码,在链接的时候,从来不知道我们所链接的动静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找;在讲解获取环境变量之前,请老铁回答我一个问题:我们之前使用C语言时,经常写main函数,所以我要问的是main函数可以带参数吗,最多可以带几个?我们看到,带上路径之后运行成功了,上面没带路径却报没有找到的错误,这是为什么呢?为什么系统的命令能找到,而我们自己的程序找不到呢?原创 2022-11-06 19:46:17 · 1551 阅读 · 0 评论 -
Linux系统编程·进程创建及终止
OS将不同的数据结构全部维护到一个链表中, 空间并没有释放, 只是设置为无效, 当再次创建进程时, OS会直接从这里拿出来相关的task_struct 和 mm_struct这些内核数据结构, 由此省去了开辟空间所花费的时间, 这样一来, 只要处理新进程的代码和数据的初始化工作即可.这里会提到一个概念, 叫做内核的数据结构缓冲池(slab分派器)当一个进程调用 fork 函数之后, 就会有两个二进制相同的代码的进程, 而且它们都运行到相同的地方, 但是每个进程都可以执行自己的代码.为什么用非零表征失败呢?原创 2022-11-10 17:33:55 · 1600 阅读 · 6 评论 -
Linux系统编程·进程地址空间
我们之前在C语言上面所学习的程序地址空间,是内存吗?其实不是内存,而且也不应该叫做程序地址空间,应该叫进程地址空间,这是操作系统上的概念。进程地址空间如下图所示分布:好,下面我们进行验证:验证一:进程地址空间验证验证二:验证堆和栈增长方向的问题很明显:堆的地址逐渐增大,栈的地址逐渐减小。验证了堆区向地址增大的方向增长,栈区向地址减小的地方增长,堆栈是相对而生的。所以一般在C函数中定义的变量,通常是在栈上保存的,那么先定义的变量一定是地址比较高的。验证三:如何理解 static 变量?函数原创 2022-11-10 06:45:00 · 1468 阅读 · 0 评论 -
Linux系统编程·进程优先级
所以,在Linux中, 如若要调整进程的优先级, 需要改变的是进程的 nice 值. 不过注意哦, nice 值是有范围的, 它的取值范围是 -20 到 19. 这个我们也能理解,可能有老铁会问了, 诶, 不对呀, 我的电脑是单CPU的, 但是我的电脑上好多个进程都在跑啊, 比如我一边在VS上敲代码, 一边打开QQ音乐听歌, 这是为什么呢?孤儿进程在父进程退出后,父进程成为init进程,进程退出,孤儿进程的资源将被init进程释放;CPU内的寄存器, 可以临时的存储数据, 非常少, 但是很重要.原创 2022-11-09 16:15:19 · 1754 阅读 · 2 评论 -
Linux系统编程·进程状态
前面我们说了进程的概念, 掌握了 fork 系统接口的基本使用, 那这里有一个问题就是: 我们在调用一个函数, 当这个函数准备 return 的时候, 这个函数的核心功能完成了吗?已经完成了, 此时:为了搞清楚正在运行的进程是什么意思, 我们需要知道进程的不同状态.运行态运行态指的是进程正在CPU上运行, 还是进程只要在运行队列中就叫做运行态?答案是进程只要在运行队列中就叫做运行态, 代表我已经准备好了, 随时可以被调度器调度.(正所谓, 时刻准备着!)终止状态指的是这个进程已经被释放了, 就叫做原创 2022-11-08 17:46:06 · 1514 阅读 · 1 评论 -
Linux系统编程·进程概念
所以,这也就引入了下面的一个问题: 创建进程有很多方法, 如 ./你的程序(./myProcess), 每次执行./myProcess 时, 进程 pid 发生变化, 但是父进程 ppid 不变, 那为什么 ppid 不变, 父进程是谁呢?我们知道是不可以的, 那在我们的C语言中有没有可能两个以上的死循环同时运行, 这也是不可能的.程序是静态的指令集合,保存在程序文件中, 进程是程序的一次运行过程中的描述。这就好像我们前面说的那个学生的例子,所以为什么管理进程要有PCB呢?原创 2022-11-07 20:38:34 · 1789 阅读 · 0 评论 -
Linux系统编程·进程概念引入
不知不觉写博客已经一年过去了,还是有点小感慨的呀。目前大三,每天都有很多任务需要完成,所以就不多说了,OK,下面我们开始更新Linux系统编程和网络编程方面的知识,讲的比较深入哦,而且这部分内容还是有难度的,不过我会尽可能的让知识不那么抽象,跟上我的脚步,一起加油吧。原创 2022-10-19 06:45:00 · 1639 阅读 · 0 评论