Linux
文章平均质量分 78
小苏打爱吃糖�
这个作者很懒,什么都没留下…
展开
-
网络层 UDP协议与TCP协议详解
网络层 UDP协议与TCP协议详解1. UDP协议UDP(User Datagram Protocol 用户数据报协议,是不可靠的数据报传输协议,不确保数据安全有序的到达对端。特点:传输层协议无连接:知道对端的IP和端口号就直接进行传输, 不需要建立连接。不可靠传输:没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息。面向数据报:不能够灵活的控制读写数据的次数和数量。1. 协议格式16位源端口号:数据从哪个端口发送出来原创 2022-02-23 14:59:08 · 1490 阅读 · 1 评论 -
HTTP协议详解
HTTP协议详解1. 认识HTTP协议超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发原创 2022-02-08 14:28:38 · 2610 阅读 · 0 评论 -
网络套接字编程
网络套接字编程一、 认识UDP协议UDP(User Datagram Protocol 用户数据报协议,是不可靠的数据报传输协议,不确保数据安全有序的到达对端。特点:传输层协议无连接不可靠传输面向数据报应用场景:性能要求大于安全要求,比如视频传输。二、UDP通信程序的编写0. 前提a. 什么是套接字编程就是网络通信程序的编写,网络中的各种通信,都是用户与服务器之间的通信,不存在用户与用户之间的直接通信。也不存在服务器和服务器之间的直接通信。b. 网络通信都是两端主机之间的通信:原创 2022-01-29 16:29:49 · 2408 阅读 · 0 评论 -
网络编程基础
网络编程基础一、网络发展背景独立模式:每台计算机相对独立。无法共同处理任务。网络互联:多台计算机连接在一起,完成数据共享。共享数据由一个主机完成管理。局域网:连接的终端越来越多,通过交换机和路由器将更多台计算机连接在一起。广域网:将远隔千里的计算机全部连接在一起(把各个局域网连接在一起)。二、IP地址IP地址是每一台计算机在网络中的唯一标识。**ipv4:**uint32_t类型的整数,不到43亿。也就是说地球上如果每个人一个计算机,IP地址根本不够分配。DHCP - 动态地址分原创 2022-01-25 10:10:12 · 104 阅读 · 0 评论 -
Linux多线程
Linux多线程一、线程的概念线程是进程中的一条执行流,线程在进程的地址空间内运行但是因为Linux下执行流是通过PCB实现的,一个进程中可以有多个执行流,也就是一个进程中可以有多个PCB,并且这些PCB共享了很多程序运行所需资源,因此Linux下的PCB就起了一个新名字—轻量级进程。二、进程和线程的区别进程是操作系统进行资源分配的基本单元。线程是操作系统进行CPU调度的基本单元。线程是进程中的一条执行流,是CPU调度的基本单元,因为Linux下执行流是通过PCB实现的,因此Linux下的线程实原创 2021-12-06 16:30:31 · 478 阅读 · 0 评论 -
生产者消费者模型
生产者与消费者模型一种特殊的设计模式针对场景有大量数据的产生以及处理的场景。生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的生产者与消费者模型的优点解耦合、支持并发、支持忙闲不均实现生产者与消费者无非原创 2021-12-01 18:05:42 · 68 阅读 · 0 评论 -
Linux进程概念
一、冯诺依曼体系结构:现代计算机的硬件体系结构(规定了现代计算机应该具有那些硬件单元)包含了五大硬件单元:输入设备:鼠标,键盘,麦克风等输出设备:显示器,打印机等存储器:内存条运算器:中央处理器—cpu控制器:中央处理器—cpu注意:图中存储器指的是内存不考虑缓存情况,CPU智能对内存就行读写,不能直接访问输入和输出设备也就是说,所有的计算机硬件全部围绕存储器工作,存储器在中间起到数据缓冲的作用。使用内存作为存储器的原因:内存的吞吐量大。存储器分内存和外存,是因为没有一种原创 2021-10-17 16:37:43 · 525 阅读 · 0 评论 -
Linux 进程信号
进程信号概念:信号就是软件中断。用于向进程通知某个事件的发生,打断进程当前的操作,去处理这个事件。Linux中信号的种类:62中1~31号:非可靠信号,有可能会造成事件丢失。34~64号:可靠信号,不会丢失事件。信号的生命周期产生信号–》在进程pcb中注册信号–》注销信号–》处理信号信号的产生硬件产生:ctrl + c;ctrl + | ;ctrl + z;软件产生:kill命令发送信号给指定进程 kill -signum pidint kill(pid_t pid, int sig原创 2021-05-03 19:01:24 · 149 阅读 · 0 评论 -
Linux 进程间通信 二、共享内存
共享内存开辟一块儿物理内存空间,各个进程将这块物理内存通过页表映射到自己的虚拟内存空间中,通过访问虚拟地址,实现对物理内存的控制,进而实现数据共享。是进程间通信中最快的一种方式。1.创建或打开共享内存:int shmget(key_t key, size_t size, int shmflg);key:标识符,通过标识符,多个进程可以打开同一块儿共享内存,实现数据通信。size:要创建的共享内存大小,如果共享内存已经存在,则忽略这个参数。shmflg:打开方式+权限 IPC_CREAT | IP原创 2021-05-01 13:21:02 · 426 阅读 · 0 评论 -
Linux 进程间通信 一、管道
进程间通信进程之间无法直接通信,因为每个进程都有自己的独立的虚拟地址空间,访问的都是自己的虚拟地址。如果将一号进程的虚拟地址传给二号进程,通过二号进程的页表来映射,并不能映射到正确的物理地址空间。所以两个进程的映射关系并不同,具有独立性,因此无法直接通信。进程间通信的原理:操作系统为进程间提供一个公共的传输媒介,实现公共访问,进而实现进程间通信。操作系统根据需求不同提供了不同的进程间通信的方式:管道共享内存消息队列信号量管道特性:半双工通信,就是可以选择方向的单向通信。本质:系统内核原创 2021-04-26 19:50:45 · 120 阅读 · 0 评论 -
Linux基础IO 二、系统调用IO接口
int open(const char *pathname, int flags, mode_t mode);pathname:要打开的文件路径名。flags:必选其一的选项:O_RDONLY;O_WRONLY;O_RDWRO_RDONLY:只读文件;O_WRONLY:只写文件;O_RDWR:可读可写文件可选项:O_CREAT;O_EXCL;O_TRUNC;O_APPENDO_CREAT:文件不存在,则创建新文件;O_EXCL:搭配O_CREAT使用,原创 2021-04-18 16:52:02 · 116 阅读 · 0 评论 -
Linux 基础IO 一、库函数IO接口
FILE *fopen (const char *path, const char * mode)path:要打开的文件路径名。mode:打开方式,包括:r,r+,w,w+,a,a+,b。r:只读;r+:可读可写;w:只写,不存在则创建新文件;w+:可读可写,不存在则创建新文件;a:追加只写,总是将数据写入文件末尾,不存在则创建新文件;a+:追加可读可写,总是将数据写入文件末尾,不存在则创建新文件;b+:对文件进行二进制操作;返回值:失败返回NULL,成功则返回文件留置针FILE*。原创 2021-04-15 21:33:39 · 143 阅读 · 1 评论 -
模拟Linux下shell功能,实现简易的minishell
什么是shellShell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它接收用户命令,然后调用相应的应用程序。编写思路捕捉键盘输入的信息。解析输入信息:将键盘的输入信息解析成 命令名称+运行参数创建子进程:让子进程运行对应名称的程序。(程序替换)等待子进程退出。代码实现#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string原创 2021-04-14 14:22:22 · 155 阅读 · 0 评论 -
Linux进程控制
进程退出就是结束一个进程的运行1. return在C语言中,main函数内部我们总会写一个 return 0; 来作为结尾,这就是退出main函数的标志。#include <stdio.h>int main (){ printf("hello world\n"); return 0;}2. void exit (int status)exit 函数是一个库函数,用于在任意位置退出一个进程。#include <stdio.h>#include <un原创 2021-04-11 15:43:48 · 242 阅读 · 1 评论 -
Linux程序地址空间
程序地址空间地址:通常所说的的地址,都是内存的地址,是内存单元的编号。但是我们所使用的硬件内存中,真的存在这些划分吗? 我们通过代码来探究一下。#include <stdio.h>#include <unistd.h>int g_val = 100; //创建一个全局变量 g_valint main (){ pid_t pid = fork(); if (pid < 0) { return -1; //创建子进程失败 } else if (p原创 2021-04-07 20:32:10 · 164 阅读 · 1 评论 -
Linux环境变量
环境变量环境变量就是配置系统运行环境参数的变量,使程序运行环境配置更加灵活,以及可以通过环境变量实现进程间的小量数据通信。(父子进程的传递)环境变量的操作env:查看环境变量set:查看所有变量,包括普通变量和环境变量echo:查看单个环境变量的内容export:设置一个环境变量unset:删除一个环境变量env:创建普通变量和环境变量:MYVAL为普通变量,MYVAL2为环境变量,所以用set命令可以查找到两个变量,而使用env查找的时候只能找到环境变量MYVAL2。代码操作原创 2021-04-07 11:46:42 · 137 阅读 · 0 评论 -
Linux下缓冲区的作用(将输出结果打印到终端)
标准输出设备我们知道C语言中,printf函数是将程序运行后要输出的内容在显示器中显示,也就是将内容打印到输出设备显示器上。然而在Linux中有一个重要的概念就是Linux系统下一切皆文件,也就是说在Linux中,把显示器当做文件类型进行操作,数据才能够被打印到显示器上,其中,打印到显示器被称为标准输出设备。打印的内容是如何显示到显示器上的其实当我们每次要打印数据时,并不是将数据直接发送给标准输出设备,也就是并直接发送给显示器,而是将要打印的数据先存放到缓冲区,当缓冲区数据满时,或者程序结束时,或者手原创 2021-04-03 21:09:03 · 2468 阅读 · 3 评论 -
Linux下make/Makefile项目自动化构建工具
Linux下make/Makefile项目自动化构建工具了解make和MakefileMakefile的编写规则make的执行规则实际用法项目构建的主要过程了解make和MakefileMakefile:是一个文本文件,记录的是一个项目的构建规则流程。make:是一个工具,用来执行Makefile文本中的相关动作,如编译、链接等。简单来说就是用Makefile编辑好想要执行的命令,然后用make来执行Makefi里面的命令,不用再去一步一步的输入。Makefile的编写规则目标原创 2021-04-01 17:02:15 · 3709 阅读 · 6 评论