![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 92
柒柒花生酱
趁着年轻,多奋斗奋斗。
展开
-
Linux操作系统:进程间通信
文章目录通信基本概念进程通信与进程独立进程间通信的目的进程间通信的分类进程数据交互:管道什么是管道匿名管道写端与读端建立匿名管道的函数最简单的进程间通信管道的四大特性管道的特点内核角度理解管道命名管道命名管道和匿名管道的区别如何创建命名管道管道实现服务端和客户端的通信管道和共享内存的区别先组织,再描述进程间通信相关接口ftok(获取唯一标识码)shmget(创建共享内存)shmctl(控制共享内存)shmat(将共享内存段与当前进程挂接)shmdt(将共享内存段与当前进程脱离)共享内存实现客户端和服务端的通原创 2021-08-21 23:34:07 · 369 阅读 · 0 评论 -
Linux操作系统:重定向和动静态库的自实现
文章目录shell重定向的实现动静态库的实现前言静态库动态库shell重定向的实现之前博主完成了一个简单的shell命令程序:点击这里但是这个函数是没有办法完成重定向功能的echo “hello world” > hello.txt当输入上述命令时,程序会发生报错。程序更新后 如下: void redirect(char* cmd) { int fd = -1; int redirect_count = 0; char* ptr = cmd; ch原创 2021-08-09 00:02:24 · 268 阅读 · 0 评论 -
Linux操作系统:IO基础详解(下)
文章目录缓冲行缓冲VS全缓冲缓冲区的另一问题何为重定向系统调用dup2的重定向磁盘物理结构逻辑结构文件系统理解文件系统inodeBlock group文件增删查改目录硬链接与软链接硬链接软链接链接数目静态库与动态库库的介绍静态库动态库头文件与库文件的关系缓冲行缓冲VS全缓冲C库函数写入显示器属于行缓冲,顾名思义,也就是遇到换行符’\n’就会立即刷新出去。C库函数写入文件时是全缓冲,也就是写满缓冲区才能刷新,如果发生重定向时(关闭1号文件)数据的缓冲方式就会由行缓冲变为全缓冲但是如果关闭1号文件原创 2021-08-08 17:42:57 · 349 阅读 · 0 评论 -
Linux操作系统:IO基础详解(上)
文章目录标准输入、输出和标准错误系统调用接口(write、read)open函数close函数read函数write函数具体案例文件描述符系统如何管理文件一切皆文件标准输入、输出和标准错误#include <stdio.h>#include <string.h>int main(){ FILE *fp = fopen("myfile", "w"); if(!fp){ printf("fopen error!\n");} const char *msg = "hel原创 2021-08-07 23:47:20 · 851 阅读 · 0 评论 -
Linux操作系统:简单shell的建立
文章目录简易shell预备知识实现myshell提示符获取命令行解析命令行建立子进程(fork)替换子进程(execvp)父进程等待子进程退出代码总结简易shell预备知识shell由标识为sh的方块代表,它随着时间的流逝从左向右移动。shell从用户读入字符串"ls"。shell建立一个新的进程,然后在那个进程中运行ls程序并等待那个进程结束。利用strtok解析命令行sep参数是个字符串,定义了用作分隔符的字符集合第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个原创 2021-07-31 15:40:39 · 228 阅读 · 0 评论 -
Linux操作系统:进程创建、写时拷贝、进程控制
文章目录进程创建回顾fork再次理解fork写时拷贝进程控制进程终止进程终止退出场景进程退出的函数(_exit与exit)进程等待为什么子进程需要被等待等待进程的方法进程创建回顾fork 1 #include <stdio.h> 2 #include <unistd.h> 3 4 int main() 5 { 6 printf("fork之前的进程pid,child: %d, father: %d\n", getpid(), getppid());原创 2021-07-30 22:03:45 · 353 阅读 · 0 评论 -
Linux操作系统:进程(优先级、环境变量、地址空间)
文章目录优先级进程优先级的表示方式PRI与NI其他相关概念环境变量优先级优先级与权限是否一样?试想我们大学去教室占位,你有权去教室占位,这是你的权限,但是如果你去的晚了发现没有位置坐了,可能需要站着上课,这是因为你没有早到,也就是你的优先级不够(来的不够早)。再来说进程,当进程太多时,进程就需要被合理的管理,总不能谁都抢着去占用CPU,所以CPU分配资源的先后顺序就是进程的优先级在我们的计算机中肯定是进程数大于CPU的数量,也就是资源有限,但是人太过多了,这样优先级就显得至关重要,它可以让优先级高原创 2021-07-23 17:01:58 · 572 阅读 · 1 评论 -
Linux操作系统:操作系统与进程之fork、相关状态、僵尸进程
文章目录操作系统什么是操作系统操作系统如何管理系统调用和库函数概念为什么需要操作系统进程进程的概念如何管理进程一、描述二、PCB三、task_struct操作系统什么是操作系统操作系统(operation system,简称OS),简单来说就是一款纯正的“搞管理”的软件,不仅管理硬件,同时也管理软件与硬件交互,管理所有的软硬件资源为用户程序(应用程序)提供一个良好的执行环境操作系统主要包括一下两个:内核(进程管理,内存管理,文件管理,驱动管理)其他程序(例如函数库,shell程序等等)原创 2021-07-13 22:16:18 · 794 阅读 · 6 评论 -
Linux操作系统:项目构建工具-make/Makefile
文章目录前言依赖关系和依赖方法简单的make/Makefile的使用多文件make/Makefile的使用总结前言对于一个大型项目,可能会涉及到很多文件,例如头文件,源文件等等。在VS中,我们只需在其设定的目录下,新建对应文件然后进行编写即可,就可以得到可执行文件exe。但是仅仅只是再IDE下可以,但是会在Linux环境下,怎么多文件编译、链接,这倒是个问题。VS作为一个集成开发环境,自然而然帮你做好了这一切,但是在Linux中,这些都是需要自己做的。而正因为做这些很麻烦,且不好理解,所以make,ma原创 2021-06-10 12:14:33 · 378 阅读 · 1 评论 -
Linux操作系统:gdb调试器详解
文章目录debug与release调试程序过程debug与release程序的发布方式有debug和release两种模式,release没有调试信息,不能进行调试,体积较小,debug携带调试信息,可以进行调试,但是文件较大。Linux中,使用gcc/g++编译的程序,默认使用的是release模式,所以就不能直接使用gdb进行调试。如果想要调试,必须在进行gcc/g++编译时,携带-g选项。如下,同一个文件分别使用debug(带-d的)和release,其中debug的文件大小明显大于rele原创 2021-06-09 23:04:09 · 389 阅读 · 0 评论 -
Linux操作系统:gcc编译器使用详解
文章目录gcc如何完成(1)预处理(进行宏替换)(2)编译(生成汇编)(3)汇编(生成机器可识别代码)(4)链接(生成可执行文件或库文件)重要概念:函数库gcc如何链接函数静态库与动态库file指令与ldd指令gcc如何完成格式: gcc [选项] [要编译的文件] [选项] [目标文件](1)预处理(进行宏替换)预处理功能主要包括宏定义,文件包含,条件编译,去注释等。预处理指令是以#号开头的代码行。实例: gcc –E hello.c –o hello.i选项-E,该选项的作用是让 gcc原创 2021-06-09 20:08:54 · 968 阅读 · 0 评论 -
Linux操作系统:vim编辑器常用命令
文章目录前言vim的基本概念vim的基本操作vim正常模式命令集(1)复制与粘贴(2)删除(3)光标移动和定位(4)撤销与反撤销vim底行模式命令集(1)查找(2)跨文件操作补充结束语前言博主之前使用的VS属于IDE,即集成开发环境,具体来说也就是编辑器、编译器以及调试器等等各种功能集成与一体的软件,可以在此软件上同时完成编辑、编译以及调试运行等多项功能,使用成本大幅降低。而在Linux当中编写各种编程语言,虽然也有集成的开发环境,但是为了深入理解计算机,简而言之为了学习!我们需要刻意的让集成环境分开原创 2021-06-09 16:25:08 · 447 阅读 · 0 评论 -
Linux操作系统:详解Linux的权限问题
文章目录权限超级用户与普通用户Linux权限管理(1)文件访问者的分类(人)(2)文件类型和访问权限(事物属性)(3)文件权限值的表示方法(4)文件访问权限的相关设置方法(5)粘滞位权限超级用户与普通用户Linux下有两种用户:超级用户(root)、普通用户。超级用户:可以再Linux系统下做任何事情,不受限制。普通用户:在Linux下做有限的事情。超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。如何从普通用户切换到超级用户使用su命令,su [用户名],再输入用户所对应的原创 2021-06-06 20:24:06 · 712 阅读 · 2 评论