
Linux
相关知识
乌克兰水晶小乳猪
一个计算机专业的学生
展开
-
Linux基础_vim命令
命令模式下命令含义:set nu显示行号:setnonumber隐藏行号:set mouse=a鼠标点到哪里光标移动到哪里:set cursorline鼠标移动到哪一行,哪一行就有行线gg光标移到第一行80gg光标移到80行G光标移到最后一行/关键字搜索字符n向下匹配N向上匹配yy复制一整行y3y复制3行yyp复制光标所在行,并粘贴...原创 2022-04-18 10:47:09 · 2685 阅读 · 0 评论 -
水平触发和边缘触发
1.水平触发(LT)当被监控的文件描述符上有可读写事件发生时,会通知用户程序去读写,他会一直通知用户,如果这个描述符是用户不关心的,它每次都返回通知用户,则会导致用户对于关心的描述符的处理效率降低。复用型IO中的select和poll都是使用的水平触发模式。2.边缘触发(ET)当被监控的文件描述符上有可读写事件发生时,会通知用户程序去读写,它只会通知用户进程一次,这需要用户一次把内容读取完...原创 2020-04-01 14:27:39 · 1804 阅读 · 1 评论 -
除了使用fork产生子进程,还有其它的方法吗?子进程可以访问父进程的变量吗?
除了使用fork产生子进程,还有其它的方法吗?我当时说没有了,竟然把vfork()给忘记了。vfork()函数的调用序列和返回值与fork相同,同样可以创建一个新进程,但两者的语义不同。vfork()与fork的区别有二:(1)vfork出的子进程不拷贝父进程的地址空间,即使父进程的数据被修改。新进程的目的是exec一新程序。(2)在vfork调用中,子进程先运行,父进程挂起,直到子进程...原创 2020-03-18 17:46:00 · 1100 阅读 · 0 评论 -
面试高频考点:TCP的三次握手中,为什么要进行第三次?
关于TCP协议三次握手的问题,在面试中值最为常见的知识点之一,真的是高频考点,得到了很多面试官的青睐,如果这个知识点没有掌握好,面试官要是问的更深入一点,我们往往会不知所措。为什么简历连接要进行三次握手呢?首先非常明确的是两次握手是最基本的。第一次握手,客户端发了个连接请求消息到服务器,服务器收到消息后知道自己与客户端是可以连接成功的,但此时客户端并不知道服务器是否已经接收到了它的请求,所以服...转载 2019-12-10 16:16:47 · 1706 阅读 · 0 评论 -
浏览器中输入url后,发生的事情(经典面试题)
这是一个经典的面试题,没有固定答案,越详细越好此篇博客引用自一篇我认为很经典的文章,在此附上文章的地址。我们在浏览器中输入网址。浏览器查找域名对应的IP地址DNS查找过程为:浏览器缓存->系统缓存->路由器缓存->ISP DNS缓存->递归搜索递归搜索过程为:从根域名服务器到顶级域名服务器到你查询的域名服务器。浏览器打开TCP连接(默认端口为80),向...转载 2019-11-03 14:36:35 · 1369 阅读 · 0 评论 -
数据链路层
功能用于两个设备(同一种数据链路节点)之间进行传递对比理解“数据链路层”和“网络层”链路层是为网络层提供数据传送服务的,这种服务要依靠本层具备的功能来实现,如下:① 链路连接的建立,拆除,分离.② 帧定界和帧同步.链路层的数据传输单元是帧,协议不同,帧的长短和界面也有差别,但无论如何必须对帧进行定界.③ 顺序控制,指对帧的收发顺序的控制.④ 差错检测和恢复。还有链路标识,流量控制等等...原创 2019-11-03 14:20:50 · 362 阅读 · 0 评论 -
网络层(IP协议)
IP协议功能IP功能: 将数据从 A 主机经过路径选择送至 B 主机TCP + IP功能:将数据从 A 主机经过路径选择可靠的送至 B 主机(先到达B主机的局域网,找到目标网络–>找到目标主机)协议头格式4位版本号: 指定IP协议的版本,对于IPv4来说,就是44位首部长度: IP头部的长度是多少个32bit,也就是length*4的字节数16位标识: 唯一的标...原创 2019-11-02 19:43:07 · 367 阅读 · 0 评论 -
进程与线程的区别(面试题)
进程与线程的区别进程是资源分配的最小单位,线程是程序执行的最小单位;进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据来维护代码段、堆栈段和数据段,线程没有独立的地址空间,它使用相同的地址空间共享数据;CPU切换一个线程比切换进程花费小;创建一个线程比进程开销小;线程占用的资源比进程少很多;线程之间通信更方便,同一个进程下,线程共享全局变量、静态数据等数据,...原创 2019-10-29 16:47:50 · 351 阅读 · 0 评论 -
通过代码如何获取环境变量
命令行第三个参数#include<stdio.h>int main(int argc, char *argv[], char* env[]){ int i = 0; for (; env[i]; i++) { printf("%s\n", env[i]); } return 0;}通过第三方变量 environ 获取#include<st...原创 2019-10-15 16:55:09 · 530 阅读 · 0 评论 -
互斥量 mutex
互斥量 mutex(临界资源)大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,其他线程无法获得这种变量。但有时候,很多变量都需要在线程间共享,这样的变量称为共享变量,可以通过数据的共享,完成线程之间的交互。多个线程并发的操作共享变量,会带来一些问题。我们为了解决带来的一系列问题,我们需要一把锁。Linux上提供的这把锁叫做互斥量。让我们用一张图片来深入...原创 2019-10-19 17:50:31 · 399 阅读 · 0 评论 -
死锁
死锁1.概念死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资 源而处于的一种永久等待状态。死锁的四个必要条件互斥条件:一个资源每次只能被一个执行流使用请求与保持条件:一个执行流因请求资源而阻塞时,对已获得的资源保持不放不剥夺条件:一个执行流已获得的资源,在未使用完之前,不能强行剥夺循环等待条件:若干执行流之间形成一种头尾相接的循环等待资源...原创 2019-10-19 21:51:40 · 284 阅读 · 0 评论 -
对比总结 select,poll,epoll之间的优点和缺点(面试常见)
select 的缺点输入参数和输出参数是同一个,就意味着每次调用select都要重新设置每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大select关心的文件描述符是有上限的(底层是位图,有固定大小)poll 修正了select的两个问题poll 将输入输出参数分离poll等的文件描述符无上限poll 的缺点poll中监听的文件描述符数...原创 2019-10-23 16:22:40 · 1278 阅读 · 0 评论 -
五种IO模型
再讲IO模型之前,给大家举一个钓鱼的例子。 张三去钓鱼,他钓鱼的时候一动不动,一直看着鱼竿,看有没有动,无论是谁叫他,他都不动,只有等鱼梢动了(鱼上钩了),他才会动 李四去钓鱼,他没有像张三那样瓷楞着,只是时不时的轮询检查鱼竿有没有动。一直在动。 王五也来钓鱼,他就比较聪明了,在鱼竿上挂个铃铛,只要铃铛响了,就代表鱼上钩了,否则他就干自己的事,不用去检查鱼竿有没有动,因为铃铛会提醒他...原创 2019-07-31 16:14:47 · 598 阅读 · 0 评论 -
I/O多路转接之 epoll
epoll 初识按照哦man手册的说法,是为了处理大批量的句柄而做了改进的epoll它几乎具备了之前多说的一切优点被公认Linux2.6下性能最好的多路I/O就绪通知方法。epoll 的相关系统调用epoll_createint epoll_create(int size)建立epoll 模型:红黑树就绪队列回调机制epoll_ctl(对红黑树进行操作)int e...原创 2019-10-22 21:08:21 · 305 阅读 · 0 评论 -
I/O多路转接之 poll(和select一样,等与通知)
poll函数接口#include<poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout);//pollfd结构struct pollfd{ int fd; //文件描述符 short events; //requested events 用户->内核 short revents; // retu...原创 2019-10-22 14:52:21 · 276 阅读 · 0 评论 -
I/O多路转接之 select(土豪赵六拿很多鱼竿,一次等待多个文件描述符)
初识 selectselect系统调用是用来让我们的程序监视多个文件描述符状态变化的;程序会停在select这里等待,知道被监视的文件描述符有一个或多个发生了状态的改变。用一句话来总结:select的作用就是监视多个文件描述符状态的变化select 函数原型select的函数原型如下: #include<sys/select.h>int select(int nfds,...原创 2019-10-22 12:11:21 · 327 阅读 · 0 评论 -
Linux:ps命令详细使用
ps(process status)用来列出系统中当前运行的那些进程ps 为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用 top 工具。kill 命令用于杀死进程 Linux上的进程有5种状态:运行(正在运行或者在运行队列中等待)中断(休眠中,受阻,在等待某个条件的形成或接受到信号)不可中断(收到信号不唤醒和不可运行,进程必须等...原创 2019-08-02 13:33:05 · 424 阅读 · 0 评论 -
线程的控制(创建,终止,等待,分离)
创建线程功能:创建一个新的线程原型: int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(start_routine)(void*), void* arg);参数: thread:返回线程ID attr:设置线程的属性,attr为NULL表示使用默认属性 start_routine:是个函数...原创 2019-10-23 21:44:34 · 241 阅读 · 0 评论 -
可重入 VS 线程安全
可重入 VS 线程安全概念线程安全:多个线程并发同一段代码时,不会出现不同的结果。常见对全局变量或者静态变量进行操作,并且没有锁保护的情况下,会出现该问题。重入:同一个函数被不同的执行流调用,当前一个流程还没有执行完,就有其他的执行流再次进入,我们 称之为重入。一个函数在重入的情况下,运行结果不会出现任何不同或者任何问题,则该函数被称为可重 入函数,否则,是不可重入函数。常见的线程不安...原创 2019-10-19 21:40:36 · 270 阅读 · 0 评论 -
线程
什么是线程?在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行线程本质是在进程地址空间内运行Linux没有真正的线程,是用进程模拟的线程强调资源共享线程是调度的基本单位进程VS线程进程是资源分配的基本单位线程是调度的基本单位每个线程的硬件都有自己的独立的上下文数据...原创 2019-10-19 17:15:27 · 265 阅读 · 0 评论 -
进程间通信
进程间通信目的数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源通知事件:一个进程需要向另一个或一组进程发消息,通知他们发生了某种事件进程控制:有些进程希望完全控制另一个进程的执行,此时控制进程能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。进程间通信分类管道匿名管道pipe命名管道System V IPCSystem...原创 2019-10-20 17:36:42 · 344 阅读 · 0 评论 -
进程程序替换
替换原理用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数 以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。替换函数有六种以exec开头的函数,称为exec函数: #include&l...原创 2019-08-17 14:14:27 · 240 阅读 · 0 评论 -
进程等待
进程等待的必要性之前讲过,子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。另外,进程一旦变成僵尸状态,那就刀枪不入,“杀人不眨眼”的kill -9 也无能为力,因为谁也没有办法 杀死一个已经死去的进程。最后,父进程派给子进程的任务完成的如何,我们需要知道。如,子进程运行完成,结果对还是不对, 或者是否正常退出。父进程通过进程等待的方式,回收子进程资源,获...原创 2019-08-14 19:19:26 · 317 阅读 · 0 评论 -
进程终止
进程退出场景代码运行完毕,结果正确代码运行完毕,结果不正确代码异常终止进程常见退出方法可以通过 echo $? 查看进程退出码。Linux 下进程的退出分为正常退出和异常退出两种:1.正常退出在main()函数中执行return调用exit()函数调用_exit()函数2.异常退出调用abort函数进程收到某个信号,而该信号使进程终止不管是哪种...原创 2019-08-13 10:53:09 · 312 阅读 · 0 评论 -
进程创建
fork函数初识在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。#include<unistd.h>pid_t fork(void)//返回值:子进程中返回0,父进程返回子进程id,出错返回-1通过系统调用 execlp()(这是系统调用 exec() 的一个版本),子进程采用 UNIX 命令 /bin/ls(用...原创 2019-08-12 20:10:03 · 291 阅读 · 0 评论 -
进程优先级
进程优先级基本概念为什么要有进程优先级?这似乎不用过多的解释,毕竟自从多任务操作系统诞生以来,进程执行占用cpu的能力就是一个必须要可以人为控制的事情。因为有的进程相对重要,而有的进程则没那么重要。进程优先级起作用的方式从发明以来基本没有什么变化,无论是只有一个cpu的时代,还是多核cpu时代,都是通过控制进程占用cpu时间的长短来实现的。就是说在同一个调度周期中,优先级高的进程占用的时...原创 2019-08-10 14:25:59 · 1474 阅读 · 0 评论 -
孤儿进程的详细讲解
孤儿进程僵尸即“死了还活着”,子进程已经终止了,也就是说子进程死了。但是系统会保留子进程的信息(进程ID/终止状态/使用的CPU时间总量),这些残余信息仍然存在,也就是说某种意义上还活着。孤儿则是父进程终止了,也就是丧父。孤儿进程被1号init进程领养,当然要有init进程回收喽。来段代码感受一下#include <stdio.h>#include <un...原创 2019-08-09 18:00:01 · 1809 阅读 · 0 评论 -
僵尸进程的详细讲解
Z(zombie)-僵尸进程(子进程终止,父进程没有wait子进程)僵尸即“死了还活着”,子进程已经终止了,也就是说子进程死了。但是系统会保留子进程的信息(进程ID/终止状态/使用的CPU时间总量),这些残余信息仍然存在,也就是说某种意义上还活着。孤儿则是父进程终止了,也就是丧父。僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进...原创 2019-08-09 13:44:15 · 1261 阅读 · 0 评论 -
进程的基础知识
基本概念进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位。描述进程PCB进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合Linux操作系统下的PCB是: task_structtask_struct-PCB的一种在Linux中描述进程的结构体叫做task_structtask_struct是Lin...原创 2019-08-08 21:34:10 · 326 阅读 · 0 评论 -
网络编程套接字(socket)
我们在学习网络的过程中经常能听到socket这个词,但是好多同学学完还并不知道socket到底是什么,扮演的什么角色,让我带大家解开这个疑问。socket是什么?套接字是什么?网络编程就是编写程序使两台联网的计算机相互交换数据。这就是全部内容了吗?是的!网络编程要比想象中的简单许多。那么,这两台计算机之间用什么传输数据呢?首先需要物理连接。如今大部分计算机都已经连接到互联网,因此不用担心这一...原创 2019-10-16 20:21:42 · 338 阅读 · 0 评论 -
网络编程套接字
继上篇博客的网络基础一学完后,我们继续总结必须要会的套接字才能进行网络基础二理解源IP地址和目的IP地址举个栗子:我们平常再看西游记的时候,常常会听到唐僧说,贫僧从东土大唐而来,去往西天拜佛求经。里边提到的从哪儿来就是源IP地址,到哪儿去就是目的IP地址。认识端口号端口号(port)是传输层协议的内容端口号是一个2字节16位的整数端口号用来标识一个进程, 告诉操作系统, 当前的这...原创 2019-07-23 18:47:22 · 224 阅读 · 0 评论 -
TCP协议的通讯流程(三次握手四次挥手)高频考点!!!
TCP协议的通讯流程让我们画一下三次握手和四次挥手,这个过程在传输层里,在操作系统中:在进行三次握手之前,要先进行客户端和服务器的连接,这个过程的创建是有成本的,时间成本和空间成本服务器初始化:调用socket,创建文件描述符调用bind,将当前文件描述符和ip/port(端口号)绑定起来;如果这个端口号以及被其它程序占用了,就会bind失败调用listen,声明当前这个文件描述符...原创 2019-10-19 12:36:58 · 455 阅读 · 0 评论 -
TCP协议(传输层)!!!(2)
面向字节流流字可以体现出报文与报文之间是粘到一块的,没有间隔创建一个TCP的socket,同时在内核中创建一个发送缓冲区和一个接收缓冲区(在操作系统中)调用write时, 数据会先写入发送缓冲区中;如果发送的字节数太长, 会被拆分成多个TCP的数据包发出;如果发送的字节数太短, 就会先在缓冲区里等待, 等到缓冲区长度差不多了, 或者其他合适的时机发送出去;接收数据的时候, 数据也是从...原创 2019-10-18 21:31:30 · 308 阅读 · 0 评论 -
TCP协议(传输层)!!!(1)
TCP协议(传输控制协议)在学习TCP之前,让我们把它的特性总结一遍:面向连接可靠面向字节流全双工TCP协议段格式tcp源端口号和目的端口号怎么理解?在一台机器上,一个进程对应一个端口号,端口号的作用就是用来唯一标识一个进程。源目的端口标识发起通信的那个进程,目的端口号标识接收通信的那个进程。有了端口号,接收到的报文才能够知道将报文发送到哪个进程。32位序号:表示发...原创 2019-10-18 12:01:16 · 374 阅读 · 0 评论 -
UDP协议(传输层)
UDP协议学完HTTP协议,在写博客之前,我先总结几点必须要记住的东西:用户数据报协议无连接面向数据报不可靠(但是不能说它不行,因为它足够简单)传输层协议好,记住了这些,让我们从头开始学UDP:面向数据报应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并;用UDP传输100个字节的数据:如果发送端调用一次send to,发送100个字节,那么接收端...原创 2019-10-17 14:33:04 · 369 阅读 · 0 评论 -
HTTP协议(应用层)
HTTP协议学完HTTP协议,在写博客之前,我先总结几点必须要记住的东西:可靠面向字节流的超文本传输协议无状态的底层用的是TCP(传输层)协议,正常通信前要建立连接(三次握手)好,记住了这些,让我们依次往下看:1.认识URL不仅有http,还有https,https对应的端口号是443HTTP : 端口号:80 ,普通HTTPS:端口号:443, 加密2. HTT...原创 2019-10-16 17:08:49 · 1123 阅读 · 0 评论