linux
文章平均质量分 89
shenmingik
于现在,对话未来
展开
-
Gos ——操作键盘
文章目录键盘输入原理写在前面:自制操作系统Gos 第三章第三篇:主要内容是操作键盘键盘输入原理键盘是个独立的设备,其内存有个叫键盘编码器的芯片。其作用是:每当键盘上发生案件操作,他就向键盘控制器报告哪个键被按下,哪个按键弹起了。而键盘控制器并不在键盘内部,它在主机内部的芯片。所以当某个键被按下时,键盘编码器就把这个键对应的数值发送给键盘控制器。而这个数值就是被称之为键盘扫描码,其对照表如下:我们可以看到在扫描码中有两个码:Make Code(通码)、Break Code(断码)。其中通原创 2021-12-08 15:24:46 · 1160 阅读 · 0 评论 -
Gos —— 实现线程和进程
文章目录Gos中线程的使用PCB结构线程基本信息初始化线程栈信息初始化线程调度获取当前线程信息线程切换参考文献写在前面:自制操作系统Gos 第三章第二篇:主要内容线程实现与管理有关线程或者进程基础知识见以下博客:Linux——进程C++高级——多线程编程Gos完整代码:GithubGos中线程的使用平时大家应该有使用Linux下的pthread: pthread_t new_pthread; pthread_create(&new_pthread,NULL,function原创 2021-12-04 23:09:55 · 699 阅读 · 0 评论 -
Gos ——内存管理系统
文章目录内存规划位图法位图管理内存内存管理内存管理初始化内存的分配虚拟内存的申请物理内存的申请建立物理地址和虚拟地址的映射参考文献写在前面:自制操作系统Gos 第三章第一篇:主要内容是如何管理内存,实现自己的内存池对物理内存进行管理。有关内存和内存池的知识见以下几篇博客:内存、内存——CPU、内存以及磁盘是如何交互的、malloc底层原理剖析——ptmalloc内存池Gos完整代码:Github内存规划我们都知道,为了共享内核给我们提供的系统调用以及各种硬件资源。Linux对一个进程的内存进行原创 2021-12-03 23:46:23 · 1079 阅读 · 0 评论 -
Gos —— 定时器8253
文章目录时钟定时器8253定时器计时8253入门读/写逻辑寄存器计数器控制字寄存器8253工作方式8253初始化定时器初始化参考文献写在前面:自制操作系统Gos 第二章第十篇:主要内容是如何协调操作系统中各部件工作频率的组件定时器Gos完整代码:Github时钟之前,我其实在中断的实现机制那篇博客中提到了时钟中断这个概念,而且它被放在RPQ0这个最为重要的位置。那它是干什么的呢?为什么会这么重要呢?我们可以想想在平时生活中,我们如何跟其他人进行工作中的同步呢?以下为虚拟场景:“小龚,这个任原创 2021-11-30 18:57:54 · 2226 阅读 · 0 评论 -
Gos —— 开启中断与中断机制详解
文章目录中断描述符表中断描述符中断描述符表寄存器中断错误码写在前面:自制操作系统Gos 第二章第九篇:主要内容是中断相关知识已经在内核中如何取实现中断关于中断的基础知识请移步至此博客:什么是中断Gos完整代码:Github中断描述符表和其他的概念一样,我们首先要了解的就是操作系统是如何识别 执行中断的。这靠的其实就是中断表描述符和中断表描述符表。中断描述符表(IDT,interrupt descriptor table)其实就是保护模式下面我们用于存储中断处理程序函数指针的一个数据结构。当C原创 2021-11-24 22:03:13 · 823 阅读 · 0 评论 -
Gos —— 加载内核
文章目录加载内核初始化内核写在前面:自制操作系统Gos 第二章第八篇:主要内容是如何加载内核Gos完整代码:Github前面我们不是在MBR引导程序工作就是在Loader内核加载器中工作。在开启分页机制之后,其实我们下一步做的工作也就是加载内核了。这里提前剧透一下加载内核的步骤:加载内核:其实也就是把内核文件从硬盘上加载到内存中初始化内核:在开启分页机制之后,将加载进来的elf内核文件放入相应的虚拟内存地址,然后跳过去执行就可以了加载内核第一步就是加载内核了。但是在加载之前,我们需要原创 2021-11-15 15:12:58 · 713 阅读 · 0 评论 -
Gos —— 启动分页机制
文章目录页目录项和页表项开启分页机制设计页表写入cr3开启分页参考文献写在前面:自制操作系统Gos 第二章第七篇:主要内容是如何获取开启x86体系下的分页机制相关页表的概念在程序地址转换这篇博客中已经详细介绍过了,本篇文章将不会重复介绍Gos完整代码:Github页目录项和页表项想要启动分页机制,我们首先要谈的就是存储物理页地址的页目录项和页表项了。其都是4字节,这32位被人为的规定成为如下表示:(守约可以说的上是操作系统设计的精髓了)可以明显的看出来页表项和页目录项的差别其实就在于第原创 2021-11-06 21:02:15 · 283 阅读 · 0 评论 -
Gos —— 获取物理内存容量
文章目录linux 中获取内存信息的方法0xe820:遍历主机上全部内存0xe801:分别检测低15MB和16MB~4GB的内存写在前面:自制操作系统Gos 第二章第六篇:主要内容是如何获取内存信息linux 中获取内存信息的方法大家可能在想,我们获取内存信息多简单啊,直接top命令就可以了。确实,在Linux中输入这个命令就可以了。但是在我们自己的操作系统上可没人帮我们实现top命令,所以我们必须明白这个top命令的底层原理实现。注:top这个例子可能不是很准确,大家懂我啥意思就好了在x原创 2021-10-25 15:55:34 · 542 阅读 · 0 评论 -
Gos —— 开启保护模式
文章目录实模式保护模式实模式的五宗罪寄存器扩展内存访问段描述符全局描述符表段选择子进入保护模式打开A20地址线并加载全局描述符表GDT打开保护模式开关cr0GO GO GO参考文献写在前面:自制操作系统Gos 第二章第五篇:主要内容是如何进入保护模式实模式我们既然这篇主要的内容是保护模式,那么其实就绕不开它的对立面:实模式了。实模式,我们顾名思义其实就大概也能猜出来一点:**实模式下程序用到都是真实的物理地址!**像这个系列的前四章的程序其实都是在实模式下面运行的。而在实模式下访问内存用到的就原创 2021-10-05 17:30:55 · 529 阅读 · 0 评论 -
Gos —— 掌控硬盘
文章目录硬盘控制器端口常用硬盘操作方法操纵硬盘参考文献写在前面:自制操作系统Gos 第二章第四篇:主要内容是如何操纵外设,如何操纵硬盘关于硬盘的原理我在Linux —— 文件系统及相关操作命令其实是已经简单讲了一下了,这里就不再赘述了。在上一篇中我们讲到了CPU和显示器交互的接口其实就是显存。那CPU和硬盘打交道也是同样的道理:硬盘控制器注:硬盘控制器是专门驱动外部设备的模块电路,CPU只同它们交互,由它们将信息传递给外部设备硬盘控制器端口让硬盘工作,我们需要通过读写硬盘控制器的端口。原创 2021-10-04 22:06:58 · 843 阅读 · 0 评论 -
Gos —— 显示器控制
文章目录IO接口IO端口显卡显卡交互控制显示器参考文献写在前面:自制操作系统Gos 第二章第三篇:主要内容是如何操纵外设,如何操纵显示器IO接口其实博主之前对和硬件打交道是非常恐惧的。一个是不了解,一个是外部设备种类繁多、原理各异,实在是没有太多的精力精通每一项了。其实,说白了就是没有一个统一的接口供我这种懒狗调用,兼容性太差。但是,按照计算机哲学来看:任何不兼容的问题,其实都可以通过加一层来解决这个问题,这一层就是 —— IO接口。比如说,声卡就是驱动影响设备的;显卡就是驱动显示器的。所以,今原创 2021-09-29 21:18:10 · 582 阅读 · 0 评论 -
Gos ——BIOS与继承者MBR
文章目录BIOS什么是BIOS8086的实模式内存布局 重点!!!BIOS启动MBR什么是MBRMBR的内容参考文献写在前面:自制操作系统Gos 第二章第二篇:主要内容是CPU中权力的移交,如何控制BIOS和MBRBIOS有过操作系统基础的同学都知道,当操作系统通电之后,会先加载BIOS,之后BIOS将会加载操作系统。说起来这个过程好像很简单一样,但是其实其中有很多细节是我们并不了解的,而这些细节正式掌握操作系统的屠龙技。什么是BIOSBIOS的全程是Base Input Output Sys原创 2021-09-27 22:27:43 · 307 阅读 · 0 评论 -
Gos —— 搭建基础环境
文章目录安装virtualbox在VirtualBox安装centos 7(推荐安装桌面版本)centos 7中安装虚拟环境bochsbochs 配置运行bochs创建磁盘参考文献写在前面:自制操作系统第二章第一篇:GOS环境搭建安装virtualbox直接跟着这个链接安装:VirtualBox安装在VirtualBox安装centos 7(推荐安装桌面版本)直接跟着这个链接安装:VirtualBox中安装centos 7centos 7中安装虚拟环境bochs按照以下命令安装就可:##原创 2021-09-20 20:29:28 · 523 阅读 · 0 评论 -
什么是中断
文章目录什么是中断中断分类外部中断可屏蔽中断不可屏蔽中断内部中断引发内部中断引发异常参考文献什么是中断之前博主的博客里面反复使用了中断这个词汇,可能我是明白这是啥的。但是对于读者来说可能还有些陌生,所以今天就好好来讲讲什么是中断。一个宏观的中断定义如下:由于CPU获知了计算机中发生了某件事,CPU暂停正在执行的程序,转而去执行处理该事件的程序。当这段程序执行完毕后,CPU继续执行刚才的程序。这个过程就叫中断。一般来说,操作系统是一个死循环。那么它是如何进行并发运行的呢?原因就是中断。中断虽然会打断当原创 2021-11-16 19:00:00 · 2990 阅读 · 0 评论 -
杂记 —— 程序地址转换
文章目录虚拟地址物理地址虚拟地址到物理地址的转换MMUMMU页表参考文献写在前面:平时大家有没有思考过一个问题:操作系统中这么多进程,CPU怎么知道我下一个数据放在哪个位置? 请带着这个疑惑来阅读本文。虚拟地址如果说我们操作系统的内存中只有一个程序在运行,那么我们就可以使用CPU的实地址模式,因为程序的地址在链接????的时候就可以确定了。例如,如果有个数据的内存地址是0x10086,那么每次都把它装入0x10086就可以了。但是如果又加载一个程序B,就会出现如下问题:程序A和程序B如果有原创 2021-06-03 22:09:04 · 455 阅读 · 1 评论 -
解密操作系统 —— 解密内核
文章目录内核是什么内核中有什么宏内核宏内核的缺陷与优势微内核微内核的优点Linux内核参考文献写在前面:作为Linux开发者,不止一次碰到过内核这个名词。不管是在程序内存分布啊,调度啊,都有内核的影子。但是一直没有彻底清楚内核是什么东西。所幸,极客时间的彭东老师有介绍相关知识。特此总结记录下来。内核是什么从一个开发者来说,内核是什么?内核中有什么?好像都不是那么重要,其能提供服务才是最重要的。诚然,博主之前也是这么想的,但是随着接触的多了。渐渐发现,很多框架、库等等的设计都隐含着内核的影子。以原创 2021-05-30 19:40:27 · 1863 阅读 · 12 评论 -
Linux —— 网络包的收发流程
文章目录网络模型Linux网络栈Linux网络包的接受流程参考文献网络模型同CPU、内存以及I/O一样,网络也是Linux最核心的功能。网络是一种把不同计算机或网络设备连接到一起的技术,它本质上是一种进程间通信方式,主要应用在跨系统的进程间通信,必须要通过网络才能进行。常见的网络有二层、三层、四层、五层、七层等,那么这些都是指的什么呢?关于这些层数其实都是国际标准化组织制定的开放式系统互联通信参考模型,简称为OSI网络模型。设定这么多层的原因是因为网络互连异常复杂,需要解决异构设备的兼容性,并解耦复原创 2021-05-23 19:37:01 · 534 阅读 · 2 评论 -
内存——CPU、内存以及磁盘是如何交互的
文章目录内存的存储SRAMDRAMDRAM内部以及与内存控制模块的交互(重点)DRAM与内存存储CPU和内存的交互(重点)磁盘磁盘和CPU、内存的交互参考文献之前在介绍linux——文件的时候讲了一下磁盘及其工作原理。然后又在程序员自我修养专栏讲了一下程序在内存中的布局。但是我们还是没有打通CPU和内存是怎么进行交互这一件事。这也是本文的一个目的。内存呢,是存在于CPU和硬盘之间的一个桥梁。硬盘负责存储数据,CPU负责对数据进行操作。而内存呢,则是他们两个的缓冲区。要明白内存是如何和CPU甚至和磁盘交互原创 2021-04-08 20:26:19 · 10766 阅读 · 5 评论 -
Linux——文件(IO缓冲篇)
文章目录文件I/O的内核缓冲:缓冲区高速缓存stdio库缓冲设置stdio流的缓冲模式刷新stdio缓冲区参考文献写在前面:此系列主要参考自UNIX系统编程手册,将会有大量demo。但是本章大多还是概念性知识,demo基本没有,比较枯燥。书籍链接:微云链接文件I/O的内核缓冲:缓冲区高速缓存出于速度和效率考虑,系统I/O调用和标准C语言库I/O函数在操作磁盘文件时会对数据进行缓冲。read和write系统调用在操作磁盘文件时不会直接发起磁盘访问,仅仅在用户空间缓冲区与内核缓冲区高速缓存之间复制数据原创 2021-04-02 22:19:46 · 293 阅读 · 0 评论 -
Linux——时间
文章目录日历时间有关时间的API: gettimeofday 和 time时间转换为固定格式APItime_t 转换为可打印格式:ctime分解 time_t 时间:gmtime 和 localtime分解时间和打印格式之间的转换:asctime进程时间参考文献写在前面:此系列主要参考自UNIX系统编程手册,将会有大量demo书籍链接:微云链接日历时间无论地理位置如何,Unix内部对时间的表示均是自1970.1.1(Unix大致问世的时间)以来的秒数时间表示。日历时间存储与类型为time_t的变量中原创 2021-04-01 16:16:12 · 167 阅读 · 0 评论 -
Linux——用户和组
文章目录密码文件:/etc/passwdshadow密码文件:/etc/shadow组文件:/etc/group程序获取用户和组的信息从密码文件获取记录从组文件获取记录扫描密码文件和组文件中所有记录从shadow密码文件中获取记录写在前面:此系列主要参考自UNIX系统编程手册,将会有大量demo。书籍链接:微云链接密码文件:/etc/passwd在Linux中,每个登录的用户都有一个与之相关的数值型用户标识符。用户可以隶属于一个或多个组。而每个组也都拥有唯一的名称和一个组标识符。这个表示符主要有两个原创 2021-04-01 14:05:16 · 362 阅读 · 0 评论 -
Linux——文件(进阶篇)
文章目录原子操作和竞争条件文件操作控制:fcntl()获得打开文件状态写在前面:此系列主要参考自UNIX系统编程手册,将会有大量demo阅读此文章前,推荐没有基础的小伙伴先阅读姐妹篇:Linux——文件(基础篇)书籍链接:微云链接原子操作和竞争条件熟悉多线程编程的小伙伴可能有疑惑了,如果我两个线程同时对这个文件去进行write操作,是否会发生数据覆盖的事情呢?确实,我们平时没有太多去关注系统调用的线程安全问题。这是因为,所有系统调用都是以原子操作的方式去执行的。内核保证了系统调用中的所有步骤会作原创 2021-03-28 13:14:25 · 341 阅读 · 2 评论 -
Linux——文件(基础篇)
文章目录文件概述打开文件 --- opencreate 系统调用读取文件 --- read写入文件 --- write写在前面:此系列主要参考自UNIX系统编程手册,将会有大量demo书籍链接:微云链接文件概述在Linux的设计哲学中:一切皆文件所以,文件无疑是我们探索Linux的一个很好的开端。在Linux中,所有执行I/O操作的系统调用都以文件描述符(一个非负整数),来指代打开的文件。按照Linux的哲学来看,其实管道、socket、终端设备都是可以看成文件的。在我们在shell上开启一个原创 2021-03-24 22:38:16 · 215 阅读 · 2 评论 -
malloc底层原理剖析——ptmalloc内存池
文章目录malloc底层为什么是内存池ptmalloc的设计概念Linux下的内存分配分配区chunk块是什么?bins又是什么?Fast Binsunsorted bintop chunkmmaped chunkptmalloc 的分配策略ptmalloc 的内存释放策略SGI STL 二级空间配置器参考文献malloc底层为什么是内存池malloc大家都用过,其是库函数。我们都知道库函数在不同的操作系统中其实执行的是系统调用,那么malloc在Linux上执行的是哪个系统调用呢?brk()和mma原创 2021-03-10 22:55:58 · 1773 阅读 · 4 评论 -
Ubuntu Git 与 Redis安装
目录git安装redis安装参考文献git安装使用以下命令安装gitsuao apt install gitredis安装下载Redis,由于是从GitHub上下载,建议挂个梯子进入hiredis目录使用make && make install安装结束,over参考文献[1] 施磊.集群聊天服务器.腾讯课堂.2020.7.......原创 2021-01-26 22:13:58 · 193 阅读 · 0 评论 -
Ubuntu 安装Nginx及简单配置
目录NginxNginx配置参考文献首先需要Nginx安装包,可以直接下载博客里面的:下载点这里Nginx解压安装包tar -axvf nginx-1.12.2.tar.gz2. 然后我们可以看到有个Nginx-1.12.2这个文件,进去然后可以看到里面有个叫configure(安装)的文件,输入以下命令进行安装./configure --with-stream/*这个为什么要加--with-stream这个参数呢?* 因为Nginx在1.9版本之前是一个http的负载均原创 2021-01-26 19:54:00 · 570 阅读 · 1 评论 -
Linux搭建C/C++开发环境
目录安装gcc和g++安装make安装vim参考文献安装gcc和g++首先就是先查看是否有gcc和g++gcc -versiong++ -version我建议大家更换以下源:更换源链接然后使用以下命令安装gccsudo apt install gcc4. 查看gcc的版本安装g++,和gcc一样的步骤安装make安装了gcc怎么能不安装make呢?使用以下命令安装make:sudo apt install make安装vim使用以下命令安装vim原创 2021-01-20 20:04:14 · 981 阅读 · 0 评论 -
在Windows上安装Ubantu系统
事实上原创 2021-01-20 18:24:19 · 270 阅读 · 1 评论 -
linux shell脚本编程
目录脚本编程解释性和编译型语言区别一个简单的shell程序变量本地变量环境变量参数变量条件脚本编程解释性和编译型语言区别编译型 编译型语言是指在执行之前需要先把程序源文件编译为能在目标机器上直接运行的二进制可执行程序。运行时不需要再编译,执行效率高解释型 解释型语言是指源代码不需要预先进行编译,在运行时,通过解释器解释执行,执行效率低C++就是纯编译型语言;java属于编译-解释型语言,在jdk上面解释;Python是纯解释型语言;shell也是纯解释型语言。一个简单的she原创 2020-11-21 13:50:45 · 187 阅读 · 0 评论 -
Linux共享库
共享库从文件结构上讲,共享库和共享对象没什么区别,Linux下共享库就是普通的ELF共享对象。由于共享对象可以被各个程序之间共享,所以它也就成为了库的很好的存在形式,很多库的开发者都以共享对象的形式让程序来使用。共享库的版本共享库的兼容我们知道,共享库是在不断更新的。但是这种更新也会导致接口的更改和删除。这个时候,就可能导致依赖共享库的程序无法正常运行。一般来说,共享库的更新是有两种的:兼容更新。所有的更新只是在原有的共享库基础上添加一些内容。不兼容更新。更新会改变原有的接口。注意!我在原创 2020-09-06 11:06:15 · 448 阅读 · 0 评论 -
Linux——信号
信号信号是一种软件中断,提供了一种处理异步事件 的方法。例:中断用户键入中断键,则会通过信号机制停止一个程序对应在现实生活中的一个例子就是:你在打游戏的时候,你妈喊你去楼下买瓶酱油。买瓶酱油的“买”就是你妈发给你的信号。信号概念跟你妈让你做的事情一样,诸如买东西、写作业。每个信号都有自己的名字,且均以SIG开头。 附件——常用信号表在头文件<singal.h>中,这些信号都被定义成正整数,也就是他们的信号编号。但是,有一点要注意:不存在编号为0的信号。kil函数对编原创 2020-08-29 17:20:06 · 219 阅读 · 0 评论 -
Linux——作业控制
作业控制作业控制是BSD在1980年前后增加的一个特性。它允许在一个终端上启动多个作业(进程组),它支持控制哪一个作业可以访问终端,以及哪些作业可以在后台运行。作业可以看做是shell管理的进程作业控制的条件主要有三点:支持作业控制的shell内核中的终端驱动程序必须支持作业控制内核必须提供对某些作业控制信号的支持理解作业控制从shell使用作业控制功能角度讲,用户可以在前台或后台启动一个作业。如以下命令:$ vim main.c就会在前台启动只有一个进程组成的作用。$原创 2020-08-24 11:01:39 · 668 阅读 · 0 评论 -
Linux——会话(session)
会话会话这个名词在百度百科的解释是:会话是指一个终端用户与交互系统进行通讯的过程。但是笔者认为这个解释太过抽象了。后来有查看了sparkdev的博文。他给的解释比较形象:我们常见的Linux session一般是指shell session。Shell session 是终端中当前的状态,在终端中只能有一个 session。当我们打开一个新的终端时,总会创建一个新的 shell session。这表明会话是我们和shell交互的一个过程。站在进程的角度看:会话可以看成是一个或多个进程的集合原创 2020-08-20 20:25:56 · 2413 阅读 · 0 评论 -
Linux——进程组
进程组每个进程除了有一个进程ID之外,还属于一个进程组。进程组是一个或多个进程的集合。每个进程组有一个唯一的进程组ID,进程组ID类似于进程ID。获取进程组ID在早期的UNIX系统中使用以下函数查看进程组ID:#include <unistd.h>pid_t getpgid(pid_t pid); //若成功返回进程组ID,出错返回-1到了现在一般用以下函数:#include <unistd.h>pid_t getpgrp(void); //若成功返回调用原创 2020-08-20 18:15:16 · 1038 阅读 · 0 评论 -
Linux——进程
进程关于进程是什么,百度百科给了两个概念:狭义定义:进程是正在运行的程序的实例广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。个人理解:进程就是一次执行代码的运行过程,其包括但不局限于执行代码所需要各种资源。进程的标识符作为一门仿现实学科,进程也拥有自己的名字和身份证号。名字就是你命名的可执行文件名,身份证号则是进程标识符。在操作系统运行过程中,每个进程都拥有一个非负整原创 2020-08-19 21:47:17 · 551 阅读 · 2 评论 -
Linux——Makefile编写
Makefile什么是MakefileMakefile 可以简单的认为是一个工程文件的编译规则,描述了整个工程的编译和链接等规则。其中包含了那些文件需要编译,那些文件不需要编译,那些文件需要先编译,那些文件需要后编译,那些文件需要重建等等。Makefile 可以使得我们的项目工程的编译变得自动化,不需要每次都手动输入一堆源文件和参数。这个在windows平台下的IDE大多都内置了Makefile。linux上则需要自己编写。Makefile规则Makefile 描述的是文件编译的相关规则,它的规原创 2020-08-16 17:33:54 · 2048 阅读 · 2 评论 -
Linux——gdb调试手册
gdb调试gdb是什么?gdb全称“GNU symbolic debugger”,诞生于GUN计划(跟之前讲的gcc是表兄弟关系),是linux下常用的程序调试器。当下的 GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等。实际场景中,GDB 更常用来调试 C 和 C++ 程序。Windows 操作系统中,人们更习惯使用一些已经集成好的开发环境(IDE),如 VS、VC、Dev-C++ 等,它们的内部已经嵌套了相应的调试器。gdb原创 2020-08-15 16:47:38 · 534 阅读 · 0 评论 -
Linux——gcc & g++的使用和区别
gcc和g++gcc和g++都是编译器。编译代码用的!别看他俩长得差不多,但是他俩是不同的。gcc和g++的区别gcc和g++都来自一个妈:GUN 编译器集合gcc是GCC中的GUN C Compiler(C 编译器)g++是GCC中的GUN C++ Compiler(C++编译器)误区一:gcc只能编译C代码,g++只能编译c++代码。事实上,二者都可以编译c或cpp文件。gcc和g++的主要区别对于 .c和.cpp文件,gcc分别当做c和cpp文件编译(cpp的语法规则比c的更强一原创 2020-08-14 16:34:31 · 2012 阅读 · 4 评论 -
Linux ——vi/vim全知道!
vi/vim什么是vi/vim?为什么要学?vi/vim是一个功能强大、高度可以定制的文本编辑器。 vim在vi的基础上改进和增加了很多特性,其可以用显色或者底线筹等方式来显示一些特殊的信息。在这里,可能有人就要问了:哎,不就是个文本文本编辑器么?我直接用记事本它不香么?其实学习vi/vim是有原因的:1.所有类UNIX系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在2.很多个别软件的编辑接口都会主动呼叫 vi/vim3.vim 具有程序编辑的能力,可以主动地以字体颜色辨别语法原创 2020-08-14 14:54:16 · 270 阅读 · 2 评论 -
Linux——文件系统及相关操作命令
唉,本来想这阵子把muduo网络库剖析完。但是最近受了伤,去医院耽搁了。结果就是。。。muduo还没整完。今天先完成一下之前欠的债。Linux的文件体系磁盘为什么要讲磁盘呢?因为磁盘是文件的家,是它存储的位置。熟悉磁盘对我们了解linxu的文件系统大有裨(bi,四声)益。现代计算机大部分文件存储功能都是由机械硬盘来提供的,当然还有SSD和闪存(其逻辑继承自机械硬盘)。磁盘是如何存储文件的机械硬盘能够实现信息存储的功能基于:磁性存储介质能够被磁化,且磁化后会长久保留被磁化的状态。 这种被磁原创 2020-08-13 19:29:07 · 776 阅读 · 0 评论