06 2020 档案
摘要:UDP协议 相较于TCP而言,UDP通信的形式更像是发短信。不需要在数据传输之前建立、维护连接。只专心获取数据就好。省去了三次握手的过程,通信速度可以大大提高,但与之伴随的通信的稳定性和正确率便得不到保证。因此,我们称UDP为“无连接的不可靠报文传递”。 那么与我们熟知的TCP相比,UDP有哪些优点
阅读全文
摘要:代码: #include <stdlib.h> #include <pthread.h> #include <unistd.h> #include <assert.h> #include <stdio.h> #include <string.h> #include <signal.h> #inclu
阅读全文
摘要:IO多路复用(IO Multiplexing)一种同步IO模型,单个进程/线程就可以同时处理多个IO请求。一个进程/线程可以监视多个文件句柄;一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;没有文件句柄就绪时会阻塞应用程序,交出cpu。多路是指网络连接,复用指的是同一个进程/线程。一个进
阅读全文
摘要:TCP通信流程 // TCP 通信的流程 // 服务器端 (被动接受连接的角色) 1. 创建一个用于监听的套接字 - 监听:监听有客户端的连接 - 套接字:这个套接字其实就是一个文件描述符 2. 将这个监听文件描述符和本地的IP和端口绑定(IP和端口就是服务器的地址信息) - 客户端连接服务器的时候
阅读全文
摘要:socket中的listen与accept 套接字概念 Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。 既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字。与管道类似的,Linux系统将其封装成文件的目的是为了
阅读全文
摘要:数据包封装 传输层及其以下的机制由内核提供,应用层由用户进程提供(后面将介绍如何使用socket API编写应用程序),应用程序对通讯数据的含义进行解释,而传输层及其以下处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部
阅读全文
摘要:TCP传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。 UDP用户数据报协议(User Datagram Protocol)是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。 HTTP超文本
阅读全文
摘要:两台计算机在同一网段通信过程 两台计算机在不同的网段中(需经过路由器) 链路层有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步(即从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。交换机是工作在链路层的网络设备,可以在不同的链路层网络之间转发
阅读全文
摘要:互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层
阅读全文
摘要:互斥锁(互斥量) 创建互斥锁 pthread_mutex_t mutex; 初始化互斥锁 pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutexattr_t* attr); 销毁互斥锁 pthread_mutex_unlock(p
阅读全文
摘要:线程的概念 1、线程是进程内部的一个执行分支,线程量级很小。(所谓的内部就是在进程的地址空间内运行) 2、一切进程至少都有一个线程 线程和进程的区别 进程是资源竞争的基本单位 linux下没有真正意义的线程,因为linux下没有给线程设计专有的结构体,它的线程是用进程模拟的,而它是由多个进程共享一块
阅读全文
摘要:以32位的操作系统为例,32位的操作系统每个进程对应的虚拟内存为4G(232),其中内核区1G,用户区3G 进程控制块PCB 1.PCB是进程存在的数据结构,系统通过PCB的存在而感知进程的存在 2.系统通过PCB对进程进行调度和管理 3.进程(PCB)与PID是一对一关系,而与程序文件之间是多对一
阅读全文
摘要:守护进程的特点 后台服务进程 独立于控制终端 周期性执行某任务 不受用户登录注销影响 一般采用以d结尾的名字 进程组 进程组的组长 组里边的第一个进程就是该组的组长 进程组的ID等于组长的ID 会话(多个进程组) 创建一个会话的注意事项: 进程组长不能创建会话 创建会话的进程成为新进程组的组长 创建
阅读全文
摘要:FIFO有时被称为命名管道。未命名的管道只能在两个相关的进程之间使用,而且这两个相关的进程还要有一个共同的创建了它们的祖先进程。但是,通过FIFO,不相关的进程也能交换数据。 特点 有名管道 在磁盘上有对应文件 伪文件,在磁盘上大小永远为0 在内核中有一个对应的缓冲区 半双工的通信方式 使用场景 没
阅读全文
摘要:wait 函数 函数原型 #include <sys/types.h> #include <wait.h> int wait(int *status) 返回值 成功:清理掉的子进程ID;失败:-1 (没有子进程) 函数功能 父进程一旦调用了wait就立即阻塞自己,由wait自动分析是否当前进程的某个
阅读全文
摘要:孤儿进程 父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为init进程,称为init进程领养孤儿进程。 子进程为什么要有父进程? 进程结束后会自动释放用户区空间,但是pcb空间(内核空间)需要父进程来释放。 僵尸进程 子进程终止,父进程尚未回收,子进程残留资源(PCB)存放于内核中,变
阅读全文
摘要:fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。
阅读全文
摘要:fork函数简介 作用 创建一个子进程。 原型 pid_t fork(void) 返回值 失败返回-1;成功返回:① 父进程返回子进程的ID ②子进程返回 0 pid_t类型表示进程ID,但为了表示-1,它是有符号整型。(0不是有效进程ID,init最小,为1) (注意返回值,不是fork函数能返回
阅读全文
摘要:pstree:查看进程树 ps(process state) a: 所有与终端有关的进程 x: 所有与终端无关的进程 u:显示进程的启动用户 ps aux|grep firefox :获取火狐的进程号(PID)(可查看进程占用cpu、内存百分比及进程触发指令的路径) pgrep:通过程序的名字来查询
阅读全文
摘要:ifconfig:用于显示或设置网络设备 -a: 显示所有接口的配置住处 ifconfig ethX IP/MASK:配置的地址立即生效,但重启网络服务或主机,都会失效; ifconfig ethX [up|down]:启用/禁用该网卡 网络服务: RHEL5: /etc/init.d/networ
阅读全文
摘要:用户 useradd USERNAME:创建用户 passwd USERNAME:修改用户密码 --stdin:从标准输入读入密码 -d:删除用户密码 userdel USERNAME:删除用户 -r:同时删除用户的家目录 id USERNAME:查看用户的帐号属性信息 finger USERNAM
阅读全文
摘要:du:查看该目录下每个子目录的大小 -s:查看该目录的大小 df:显示磁盘的空间使用情况 fdisk:管理磁盘分区 fdisk /dev/sdb :对硬盘sdb进行分区 fdisk -l :查所有分区及总容量,加/dev/sda为查硬盘a的分区) free:查看物理内存和交换空间的使用情况 moun
阅读全文
摘要:grep:用于查找文件行中符合条件的字符串 grep [options] PATTERN [FILE...] -i:忽略大小写 --color:把匹配到的字符串用高亮颜色显示出来 -v: 显示没有被模式匹配到的行 -o:只显示被模式匹配到的字符串 -E(或者直接使用egrep): 使用扩展正则表达式
阅读全文
摘要:cat:连接文件并显示 -n:显示行号 -E:显示换行符 tac:连接文件并从尾部开始显示 more:分屏显示 less:和man命令一样用法 head -n:显示前n行 tail -n:显示后n行 -f:查看文件尾部不退出,等待显示后续追加至此文件的新内容 cut:显示文本中的某些字段 格式:cu
阅读全文
摘要:静态库的制作和使用 1. 建立如下几个文件夹和文件 include lib main.c src include文件夹下包含如下文件 func.h int sum(int a, int b); int sub(int a, int b); int mul(int a, int b); int div
阅读全文
摘要:MNIST入门 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("./mnistdata/", one_hot =
阅读全文
摘要:简单函数 #!/bin/bash fun1() { echo "This is my first fun!" } fun1 带 return 的函数 #!/bin/bash fun1() { a=1 b=2 c=`expr b` return ? 注意:
阅读全文
摘要:if else #!/bin/bash a=2 if [ b ] then echo "a 等于 b" elif [ b ] then echo "a 大于 b" else echo "a 小于 b" fi for 循环 #!/bin/bash for i
阅读全文
摘要:Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。 expr expr 是一款表达式计算工具,使用它能完成表达式的求值操
阅读全文
摘要:基本用法 定义变量 name="xumaomao" 使用变量 echo $name 只读变量 name="xumaomao" readonly name name="xmm" //错误,只读变量不能修改 删除变量 unset name //不能删除只读变量 变量类型 运行shell时,会同时存在三种
阅读全文