Linux
TANGYRun
学习是一种习惯和坚持,越努力越幸运
展开
-
Linux下的基本命令
目录相关命令:ls pwd mkdir rmdirrm cp mv cd文件相关命令:touch cat more less head tail基础命令的结构:命令名称 [参数选项] [操作对象]下面将分别介绍这些命令的功能:目录相关命令:ls指令功能: 浏览目录,列出目录下的文件信息。常用选项:-a 浏览所有文件,不忽略以.开头的文...原创 2019-03-10 17:13:57 · 113 阅读 · 0 评论 -
理解Linux中的操作系统
操作系统是一款软硬件资源管理的软件。我们可以这样理解,操作系统相当于学校的上层领导,类似于校长(管理者),拥有决策权,而硬件相当于学校的学生(被管理者)。校长其实并不直接与学生沟通,他是让辅导员或班主任来与学生打交道,计算机里的设备驱动就相当于辅导员或班主任,是管理决策的执行者。一般而言:管理者(操作系统)与被管理者(硬件)并不是直接沟通,它们之间必须有一个执行者(设备驱动),所以操作系统对下...原创 2019-04-09 14:46:57 · 240 阅读 · 0 评论 -
深度理解Linux中的“权限”
shell命令以及运行原理Linux严格意义上说是一个操作系统,我们称之为“核心(kernel)”,但是,我们一般用户是不能直接使用kernel,而是通过kernel的“外壳”程序,也就是所谓的shell来与kernel沟通。为什么不能直接使用kernel呢?从技术的角度,shell的最简单定义:命令行解释器,主要包含:将使用者的命令翻译给核心(kernel)处理,同时,将核心的处理结果翻...原创 2019-04-11 14:38:34 · 643 阅读 · 0 评论 -
网络基础(一)
网络发展网络发展的初期:计算机之间相互独立(独立模式),每台计算机之间相互独立,即每个终端都各自持有客户数据。然后到了网络互联时期:多台计算机连接在一起,完成数据共享。每个人都使用各自独立的计算机,业务之间随时自由切换,共享数据由服务器集中管理。局域网LAN:随着计算机的发展,当计算机数量越来越多时,通过交换机和路由器将计算机连接在一起。在局域网中,两台主机可以直接通信,因为局域网...原创 2019-07-11 16:02:04 · 214 阅读 · 0 评论 -
应用层网络实现一个服务器版的计算器及理解HTTP协议
应用层满足我们日常需求的网络程序都在应用层。协议是一种约定。socket api的接口,在读写数据时都是按照“字符串”的方式发送和接收的。但如果我们要传输一些“结构化的数据”该怎么办呢?例如,我们需要实现一个服务器版的加法器,客户端把要计算的两个加数发过去,然后由服务器进行计算,最后再把结果返回给客户端。这里有两个方案可以解决。方案一:客户端发送一个形如“1+1”的字符串; 这个...原创 2019-07-16 11:49:08 · 426 阅读 · 0 评论 -
传输层中的“端口号”和UDP、TCP协议
传输层传输层负责数据能够从发送端传输到接收端。端口号端口号是传输层协议的内容。端口号是一个2字节16位的整数; 端口号用来标识网络进程,告诉操作系统,当前的这个数据要交给哪一个进程来处理; IP地址+端口号能够标识网络上的某一台主机的某一个进程; 一个端口号只能被一个进程占用总结一下:端口号用来标识主机上唯一一个网络进程,公网IP标识互联网上唯一的主机。端口号+I...原创 2019-07-23 12:05:56 · 12071 阅读 · 0 评论 -
网络层IP协议
网络层主要是IP协议,网络层解决的主要问题是在网络环境中确定一个合适的路径,即将数据从A主机跨网络经过路径选择送往B主机。TCP可靠的将数据从A主机送到B主机。首先我们要清楚几个概念:主机:配有IP地址,但是不进行路由控制。 路由器:既有IP地址,又能进行路由控制。 节点:主机和路由器的统称。IP协议头部格式4位版本号:指定IP协议的版本,对于IPv4来说就是4.4位首部...原创 2019-07-28 22:40:26 · 457 阅读 · 0 评论 -
Linux高级IO之五种IO模型
本篇博客主要介绍五种IO模型的基本概念、阻塞IO和非阻塞IO的区别、同步IO和异步IO的区别。(一)IO的介绍IO中的I是input输出的意思,O是output的意思,IO是基本输入输出设备; 每个设备都由一个专用的I/O地址,用来处理自己的输入和输出信息。但记住:I/O地址绝对不能重复,如果两个设备的I/O地址有冲突,系统硬件就不能正常工作。(二)IO模型对于一次IO...原创 2019-07-30 22:02:02 · 263 阅读 · 0 评论 -
IO多路转接--select
select系统提供select函数来实现多路复用输入/输出模型。数据在通信过程中,分为两部分: 1.等待数据到达内核。 2.将数据从内核拷贝到用户区。然而在实际的应用中,等待的时间往往比拷贝的时间多得多,所以我们要想提高效率,就必然要将等待时间减少(减少等的比重)。这时,IO多路转接就是解决这个问题的:一次监视多个文件描述符的状态变化。在多路转接...原创 2019-08-10 09:42:46 · 251 阅读 · 0 评论 -
yum和编辑器Vim
Linux软件包管理器yum什么是软件包在Linux下安装软件一般都是有人把一些常见的软件提前编译好,做成软件包(可以理解成Windows上的安装程序)放在服务器上,通过包管理器可以很方便的获取这个编译好的软件包,直接进行安装。软件包和软件包管理器,和“app”与“应用商店”类似。yum(Yellow dog Updater,Modified)是Liunx下非常常用的一种包管理器,主要应用...原创 2019-08-10 16:20:45 · 240 阅读 · 0 评论 -
Linux项目自动化构建工具make/Makefile
背景知识会写makefile,从侧面说明了这个人具备了一定完成大型工程的能力,这足以说明makefile的重要性。 一个工程中的源文件不计其数,按类型、功能、模块分别放在若干目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作。 makefile带来的好处就是“自动化编译”,一旦写好了makefile,只...原创 2019-08-12 12:39:11 · 277 阅读 · 0 评论 -
Linux操作系统中的环境变量
环境变量基本概念环境变量(environment varibles)一般是指在操作系统中用来指定操作系统运行环境的一些参数。环境变量是由系统定义的。如:在编写C/C++代码的时候,在链接的时候,我们也许一直都不知道我们所链接的动静态库在哪里,但是照样可以链接成功,生成可执行程序,原因在于有相关环境变量帮助编译器进行查找。 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。常...原创 2019-08-15 16:53:48 · 1270 阅读 · 0 评论 -
程序地址空间
程序地址空间可能大家第一眼看到会觉得是表示的是内存,其实它并不是内存,不能保存数据,实际上它是一块虚拟地址,用结构体描述。我们研究的背景是在kernel2.6.32,32位平台上。先写一段代码验证程序虚拟地址运行结果:从输出结果可以看出:父子进程输出的变量值和地址是一样的,很好理解,因为子进程继承了父进程,父子并没有对变量进行任何修改。但是,如果我们将代码稍微改动一下:...原创 2019-08-19 11:37:13 · 280 阅读 · 0 评论 -
Linux进程概念
冯诺依曼体系结构我们常见的计算机,如笔记本,和不常见的计算机,如服务器,大部分都遵循冯诺依曼体系结构。我们所认识的计算机都是由一个个的硬件组成的。这些硬件包括:输入单元:包括鼠标、键盘、扫描仪、写板等 中央处理器(CPU):含有运算器和控制器 输出单元:显示器,打印机等值得注意的是:这里的存储器指的是内存,不考虑缓存的情况下,这里的CPU只能对内存进行读写,不能访问外设(输入...原创 2019-08-19 14:57:03 · 167 阅读 · 0 评论 -
深度理解fork()函数及进程控制
进程创建理解fork()函数再谈fork()函数,从前面我们知道fork函数是从已经存在的进程中创建一个新进程,新进程为子进程,而原进程为父进程。它的返回值有两个:子进程返回0,父进程返回子进程id,出错返回-1进程调用fork,当控制转移到内核中的fork代码后,内核做的事情:分配新的内存块和内核数据结构给子进程 将父进程部分数据结构内容拷贝给子进程 添加子进程到系统进程列...原创 2019-08-21 17:21:52 · 755 阅读 · 0 评论 -
Linux进程程序替换
进程程序替换为什么要有进程替换我们之前学到过,fork创建子进程,目的是让子进程执行和父进程相同的程序,并且父进程只能获得子进程某些方面的特殊信息。而我们期望的是子进程和父进程执行不同的程序,做不同的事情,所以就有了进程替换 。替换原理fork创建子进程后,子进程要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新进程替换,从新程...原创 2019-08-22 17:57:18 · 426 阅读 · 0 评论 -
Linux基础IO-文件描述符&重定向&文件系统的理解&动静态库
C文件接口首先我们需要理解C文件接口中的几个函数fwrite函数、fread函数对文件格式化读写函数fprintf与fscanf而言,尽管它可以从磁盘文件中读写任何类型的文件,即读写的文件类型可以是文本文件、二进制文件,也可以是其他形式的文件。但是,对二进制文件的读写来说,考虑到文件的读写效率等原因,还是建议尽量使用fread和fwrite函数进行读写操作。头文件:#incl...原创 2019-08-26 17:33:32 · 386 阅读 · 0 评论 -
Linux进程间通信-管道
进程间通信的目的数据传输:一个进程需要将它的数据发送给另一个进程。 资源共享:多个进程之间共享同样的资源。 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某个事件(如进程终止时要通知父进程)。 进程控制:有些进程希望完全控制另一个进程(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。进程是具有独立性,所以...原创 2019-08-29 12:15:26 · 138 阅读 · 0 评论 -
Linux进程间通信-System V IPC
System V 引入了三种高级进程间的通信机制:消息队列、共享内存和信号量。IPC对象(消息队列、共享内存和信号量)存在内核中而不是文件系统中,由用户控制释放。共享内存共享内存是System V 进程间通信中速度最快的,共享内存不提供同步和互斥机制,所以这部分必须由用户来完成。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,也就是说进程不再通过执行进入内核的...原创 2019-08-30 17:28:50 · 170 阅读 · 0 评论 -
Linux进程信号
信号这个词相信大家在生活中并不陌生,生活中有很多的信号产生,比如:早上叫你起床的闹铃,过马路的红绿灯,收到快递到来的信息...。当这些信号到来时,我们会对该信号做出相应的处理。例如取快递这个过程,当快递到来这个信号收到后,我们就去拿到快递,就要对快递进行相应的处理,处理快递一般有三种方式:1.执行默认动作(马上打开快递,使用商品)。2.执行自定义动作(快递送给你的朋友)。3.忽略快递(拿到快递后,...原创 2019-09-08 18:12:58 · 218 阅读 · 0 评论 -
Linux中的线程
线程的基本概念和理解什么是线程线程是一个进程内部的控制序列,是程序里的一个执行路线。一切进程至少都有一个执行线程,线程在进程内部运行,本质上是在进程的地址空间内运行。在CPU眼中,看到的PCB要比传统的进程更加轻量化。透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。总而言之,线程是在进程内部运行的一个执行流,Linux系统没有真正...原创 2019-10-20 18:14:54 · 226 阅读 · 0 评论 -
Linux线程的同步与互斥
Linux线程互斥我们先来谈谈进程线程间互斥相关背景概念:临界资源:多线程执行流共享的资源叫做临界资源。 临界区:每个线程内部访问临界资源的代码叫做临界区。 互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用。 原子性:不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成。互斥量大部分情况下,线程使用的数据都是局部变...原创 2019-10-27 22:42:29 · 418 阅读 · 0 评论 -
read函数和write函数以及和fread、fwrite函数的区别
学习了write函数和read函数时总把里面的参数弄混,今天特地写这篇博客将这两个函数的各个参数弄明白。同时还要明白read和fread的区别,write和fwrite的区别。write函数函数原型:ssize_t write(int fd,const void* buf,size_t count);函数说明:write()会把参数buf所指向的内存写入count个字节放到参数所指向的...原创 2019-11-01 17:07:49 · 3156 阅读 · 0 评论 -
Linux中的生产者消费者模型
为什么要使用生产者消费者模型生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而是通过阻塞队列来进行通讯,所以生产者生产完数据之后就不用等待消费者处理,而是直接将数据放到阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取数据。因此,阻塞队列就相当于一个缓冲区(一段物理内存),平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消...原创 2019-11-16 16:30:59 · 239 阅读 · 0 评论 -
单例模式、STL、智能指针下的线程安全问题
线程安全的单例模式我们首先要知道什么是单例模式:单例模式是一种经典的、常用的设计模式。设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。单例模式的特点一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访...原创 2019-11-16 18:24:42 · 661 阅读 · 0 评论 -
Linux编译器-gcc使用和调试器-gdb使用
gcc的使用gcc的四个翻译过程gcc如何完成翻译过程格式:gcc [选项] 要翻译的文件 [选项] [目标文件]1.预处理阶段(进行宏替换)主要功能:进行宏替换,头文件包含,条件编译,去注释等 预处理指令是以#号开头的代码行 实例:gcc -E hello.c -o hello.i 选项"-E"的作用是让gcc在预处理结束后停止编译过程。 选项"-o...原创 2019-11-17 14:46:53 · 598 阅读 · 0 评论 -
socket网络编程详解以及实现一个简单的UDP、TCP网络程序
socket常见的API1.int socket(int domain,int type,int protocol);头文件:#include<sys/types.h>#include<sys/socket.h>解释:soket()打开一个网络通讯端口,如果成功返回一个文件描述符。 应用程序可以像读写文件一样用read和write在网络上收发数据...原创 2020-02-21 17:58:44 · 558 阅读 · 0 评论