自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小冰球

快乐学习,乐在其中

  • 博客(183)
  • 收藏
  • 关注

原创 linux-socket编程(八)读、写、异常事件发生条件

读、写、异常事件发生条件可读的条件:套接口缓存区有数据可读;连接的读一半关闭,即接受到FIN段,读操作将返回0。如果是监听套接口,已完成连接队列不为空时。套接口上发生了一个错误待处理,错误可以通过getsockopt指定SO_ERROR选项来获取。可写的条件:套接口发送缓存区有空间容纳数据。连接的写一半关闭。即接收到RST段之后,再次调用write操作。套接口上发生了一个错误待处理,错误可以通过getsockopt指定SO_ERROR选项来获取。异常的条件:套接口存在

2020-06-21 16:13:59 512

原创 ctype.h头文件下的函数

<ctype.h>头文件提供一些函数,可以用来测试和映射字符。这些函数接受int作为参数,它的值必须是EOF或表示为一个无符号字符.如果满足则返回非零值,否则返回0.常使用到的函数:1:判断函数1:int isalnum(int c) //检查所传字符是否为数字或字母。2:int isalpha(int c) //检查所传的字符是否为字母。3:int iscntrl(int c) //检查所传的字符是否为控制字符4:int isdigit(int c) //检查所传的字符是都

2020-06-20 00:02:01 974

原创 linux-socket编程(五)recv,getsockname,gethostname等函数学习

1:read与recv函数recv首先查看一下帮助:recv的功能和read的一样,都可以从套接口当中获取数据,但是recv只能用于套接口I/O不能用于文件I/O,以及其他的I/O,read函数可以用于任何I/O。recv相比于read多了一个flags选项,通过这个选项可以指定接受的行为。主要有两个重要的选项:MSG_OOB:可以接收带外数据,通过紧急指针发送的数据。带外数据被认为具有比普通数据更高的优先级MSG_PEEK:可以接收缓存区的数据但是并不将缓存区中的数据清除,read函数

2020-06-18 11:19:24 874

原创 unix-网络编程,套接字编程简介

套接字地址结构:IPv4套接字地址结构通常被称作“网际套接字”,它以sockaddr_in命名,定义在<netinet/in.h>头文件中。struct in_addr{ in_addr_t s_addr; //32位IPv4地址}struct sockaddr_in{ uint8_t sin_len; sa_family_t sin_family; //表示地址类型 in_port_t

2020-06-17 00:22:24 148

原创 linux-socket编程(七)五种IO模型

1. 五种I/O模型阻塞I/O 当套接口完成连接,可以使用recv函数向系统提出receive请求,来接收数据,这个请求是阻塞的,直到对等方发送数据过来。非阻塞I/O使用fcntl函数来将套接字改为非阻塞模式。fcntl(fd, F_SETFL, flag|O_NONBLOCK);这时候recv函数即使没有收到数据,也不会阻塞,会返回一个错误,返回值为-1,错误代码为EWOULDBLOCK。如果还想获取到数据,就再次提出请求。这个很少使用,由于它接受的过程相当于一个循环,...

2020-06-07 17:13:57 380

原创 摘自抖音的优美句子

灯把黑夜烫了一个洞。生命,不过只是一场骗局,从你开始呼吸的那一刻起,你就已经在慢慢死亡了。真正的大师永远都怀着一颗学徒的心。我伤心的时候,你会不会认为我也是在搞笑。我爱你,不是怪你不在我身边,而是今天比平时更想你。远方除了遥远一无所有。今夜我不会遇见你,今夜我遇见了世上的一切,但不会遇见你。生命中曾经有过的所有灿烂,终究都要用寂寞来偿还。人生终将是一场单人的旅行,孤独之前是迷茫,孤独过后便是成长。世间文字八万个,唯有情字最伤人。我们终于到了小时候最羡慕的年纪,去没有成为小

2020-06-04 23:48:30 459

原创 linux-socket编程(六) tcp

1:tcp的11种状态: 上面的状态有10种,第11种是CLOSING,这个的产生条件是当服务器和客户端同时发送关闭请求,这时候不会产生FIN_WAIT状态而是会产生CLOSING状态。只有主动发送close的一端,才会有TIME_WAIT状态。可以使用代码来查看状态。服务器:客户端的端口是53372客户端:服务器的端口是6666查看tcp:看不到SYN_SEND和SYN...

2020-06-04 17:42:57 139

原创 linux-socket编程使用到的函数总结

1:wait2:waitpid3:signal4:kill5:recv

2020-06-01 22:41:03 246

原创 进程,线程,并行,并发有关知识学习

1:浅谈并行和并发并行:指的是可以同时执行不同的任务。例如上厕所的时候看手机,这里两件事情可以同时执行。并发:指的是交替执行不同的任务。其实并发有点类似于多线程的原理,多线程并非是同时执行多个任务,如果你开两个线程执行,就是在很快的速度下不断的切换这两个任务,已达到"同时执行效果"。所以他们两个的区别就是:一个是交替执行,一个是同时执行。2:进程和线程 使用一个例子来说明进程和线程之间的关系。当你开启了qq,就相当于开启了一个进程,打开支付宝就相当于开启了另一个进程,当你在q...

2020-05-18 01:06:55 269

原创 linux-socket编程(三)

1:socket选项REUSEADDR的用法,地址重复利用当你使用上一篇(linux-socket编程(二))的程序实现的时候,结果如下:如果关闭服务器端。再打开的话会出现错误产生的原因是:可以使用REUSEADDR来解决。服务器端尽可能使用REUSEADDR,在绑定之前尽可能使用setsockopt来设置REUSEADDR套接字选项,使用REUSEADDR选项...

2020-05-07 09:47:05 281

原创 linux-socket编程(四)

1:流协议与粘包TCP:基于字节流的传输服务,无边界(包与包之间没有边界),所以容易产生粘包,但是不会丢包。粘包的含义:由于TCP在传输数据的时候是无边界的,所以数据对tcp来说就是一堆没有结构区别字节块,因此就会导致如下图所示的情况。这就是粘包。2:粘包产生的原因1.SQ_SNDBUF套接字本身有缓冲区(发送缓冲区,接收缓冲区)2.tcp传送的网络数据最大值MSS大小限制...

2020-05-06 23:59:18 459

原创 linux-man命令

在学习socket编程的时候,要经常使用一些函数,这时候需要查看手册来,查看该函数的基本用法,以及参数的含义,和如果参数是一些宏的话,有哪些选项,具体的功能有哪些。这时候就需要使用man这个命令来查看。man命令是linux下的帮助文档,通过man指令可以查看linux中的指令帮助,配置文件帮助和编程帮助等信息。语法: man (选项) (参数)选项:参数:我们输...

2020-05-05 13:56:58 418

原创 linux-socket编程(二)

1:TCP客户/服务器模型(c/s) 这个就是建立连接的过程。图片摘自https://www.bilibili.com/video/BV1eb411F74G?p=72:回射客户/服务器模型3:socket, bind, listen, accept, connect实现上面所示的功能,需要的函数:socket函数//socket函数/* 包含头文件:&...

2020-05-05 00:51:41 187

原创 linux-shell(16)-sed命令

sed是一种几乎在所有UNIX平台,的轻量级流编辑器。sed主要是用来将数据进行选取,替换,删除,新增的命令。sed [选项] '[动作]' 文件选项:-n: 一般sed命令会把所有数据都输出到屏幕,如果加入此选项,则只会把经过sed命令处理过的行输出到屏幕。 -e: 允许对输入数据应用多条sed命令编辑 -i: 用sed的修改结果直接修改...

2020-04-29 23:35:08 151

原创 linux-shell(15)字符截取命令

1:cut命令:用来显示行中指定部分,删除文件中指定字段。用来显示文件的内容。cut [选项] 文件名选项:例子:test2.txt2:printf命令printf命令格式化输出结果到标准输出printf [选项] [参数]参数:包括输出格式和输出字符串,输出格式:指定数据输出时的格式,输出字符:指定要输出的数据格式替代符:转义字符:...

2020-04-29 14:32:16 328

原创 linux-shell(14) 基础正则表达式

1:正则表达式与通配符正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep, awk, sed等命令可以支持正则表达式。通配符用来匹配符合条件的文件名,通配符是完全匹配。ls, find, cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。2:基础正则表达式元字符 作用 * 前一个字符串匹配0次或者任意多次 . ...

2020-04-27 21:38:35 425

原创 linux-查看终端的命令以及ssh命令

可以使用who命令和w命令w功能最全,能显示用户登录名,终端标志,星期几登录和具体登录时间,闲置时间。用户正在指向的程序,占用CPU时间,系统的运行时间和平均负载:who仅显示用户登录名,终端标志,和登录日期和时间,pst/x是因为使用远程终端登录的。也可以直接使用tty来查看当前所使用的终端好的博客解释终端:https://blog.csdn.net/yazhoure...

2020-04-26 23:29:27 5357

原创 linux-shell(13)-环境变量配置文件

环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH,HISTSIZE(历史变量保存条数),PSI,HOSTNAME(主机名)等默认环境变量。可以使用set或者env开查看变量1:直接让配置文件生效,不需要重启命令:source 配置文件 或者 . 配置文件(点和配置文件之间有空格)2:环境变量配置文件有哪几个:/etc/profile/etc/...

2020-04-25 16:11:32 477

原创 linux-shell(12)-Bash变量测试与内容替换

就是一个表:(主要是理解了,然后用的时候查表就行)变量置换方式 变量y没有设置 变量y为空值 变量y设置值 x=${y-新值} x=新值 x为空 x=$y x=${y:-新值} x=新值 x=新值 x=$y x=${y+新值} x为空 x=新值 x=新值 x=${y:+新值} x为空 x...

2020-04-24 23:25:37 207

原创 linux-shell(11)-Bash数值运算与运算符

计算两个数相加1、declare声明变量类型declare [+/-] [选项] 变量名选项: -: 给变量设定类型属性 +: 取消变量的类型属性 -i : 将变量声明为整数型 -x: 将变量声明为环境变量 -p: 显示指定变量的被声明的类型2,使用...

2020-04-24 22:54:41 183

原创 linux-shell(10)-Bash预定义变量

位置参数变量相当于预定义变量的一部分。1:预定义变量预定义变量 作用 $? 最后一次执行命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是那个数,由命令自己来决定),则证明上一个命令执行不正确。 $$ 当前进程的进程号(PID) $! 后台运行的最后一个进程的进程号(PID) 使用$?例子:examp...

2020-04-24 16:01:28 223

原创 linux-shell(9)-Bash位置参数变量

位置参数变量(名称固定,作用固定,主要是为了向脚本中传递值)位置参数变量 作用 $n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10} $* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体。 $@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待 $# 这个变量代表命令...

2020-04-23 18:16:14 217

原创 linux-shell(8)-Bash环境变量

1:环境变量是什么用户自定义变量只在当前Shell中生效,而环境变量会在当前Shell和这个Shell的所有子Shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效。Shell和子Shell:pstree的作用是确定进程数第2个bash就是第1个bash的子Shell使用exit后,第二个bash(子Shell)就退出;...

2020-04-23 16:41:07 180

原创 linux-常使用命令总结

1:文件目录命令浏览目录命令:ls 显示目录文件,pwd显示当前所在的工作目录。目录操作命令:cd 切换目录 mkdir 创建新目录 rmdir 删除空目录浏览文件命令:cat连接文件并打印到标准输出设备上 more 分页显示文件内容 head 用户显示文件前几行的内容 tail 用户显示文件后几行的内容文件操作命令:cp可以将文...

2020-04-21 19:49:16 132

原创 linux内核的功能

1:内存管理:内存分配调用:包括静态分配方式,动态分配方式内存保护:确保每个程序在自己的内存空间运行,互不干扰。方法是使用界限寄存器或存储保护键地址映射:实现程序的逻辑地址与存储器物理地址之间的映射功能内存扩充:从逻辑上扩充物理内存,以允许比物理内存更大的程序在机器内运行,为此操作系统必须具有:请求调入功能与置换功能。2:进程管理进程控制:包括进程创建,进程撤销,进程阻塞,...

2020-04-20 23:37:26 259

原创 linux-shell(7)-Bash变量-用户自定义变量

1:什么是变量 变量是计算机内存单元,其中存放的值可以改变。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息。2:变量设置规则 a. 变量名称可以由字母,数字和下划线组成,但是不能以数字开头。b.在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须制定变量类型为数值型。c.变量用等号连接值,等号左右两侧不能有空格。d...

2020-04-19 20:10:49 292

原创 linux-shell(6)-Bash通配符与其他特殊符号

1:通配符(匹配文件名)通配符 作用 ? 匹配一个任意字符 * 匹配0个或任意多个任意字符,也就是可以匹配任何内容 [] 匹配中括号中任意一个字符。例如:[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c [-] 匹配中括号中任意一个字符,-代表一个范围。例如:[a-z]代表匹配一个小写字母。 [^] 逻辑非,代表匹配不是中括号...

2020-04-19 18:57:03 236

原创 linux-shell(5)-Bash多命令顺序执行与管道符

1:多命令顺序执行(可以简化操作)多命令执行符 格式 作用 ;(分号) 命令1;命令2 多个命令顺序执行,命令之间没有任何逻辑联系 && 命令1&&命令2 逻辑与,当命令1正确执行,则命令2才会执行,当命令1执行不正确,则命令2不会执行 || 命令1||命令2 逻辑或,当命令1执行不正确...

2020-04-18 20:17:13 1008

原创 c语言-函数参数的传递

程序一:值传递#include<iostream>#include<cstdio>using namespace std;void Exchg1(int x, int y){ int tmp; tmp = x; x = y; y = tmp; printf("x = %d, y = %d\n",x, y);}int main(){ in...

2020-04-17 23:25:51 210

原创 c语言-数据类型及指针总结

常用数据类型字节数类型 16位 32位 64位 char 1 1 1 short int 2 2 2 int 2 4 4 unsigned int 2 4 4 float 4 4 4 double 8 8 8 long 4 4 ...

2020-04-14 22:52:33 235

原创 linux-shell(四)-Bash基本功能-输入输出重定向

1:标准输入输出。设备 设备文件名 文件描述符 类型 键盘 /dev/stdin 0 标准输入 显示器 /dev/stdout 1 标准输出 显示器 /dev/stderr 2 标准错误输出 2:输出重定向(意思就是本来应该输出到显示器,现在输出到一个文件里面):目的是方便管理,但是这些命令必须有输出...

2020-04-12 20:50:27 146

原创 linux-shell(三)Bash基本命令-命令别名与常用快捷键

1:命令别名alias 别名=“原命令” 设定命令别名;以命令行定义的别名只会零时生效,重启就会消失。alias 查询命令别名 之所以可以直接使用命令是因为使用了PATH环境变量。命令执行顺序:第一顺位执行用绝对路径或者相对路径执行的命令,第二顺位执行别名,第三顺位执行Bash的内部命令例如cd使用whereis找...

2020-04-11 23:46:53 149

原创 linux-shell基础(二)Bash基本功能-历史命令与补全

1:历史命令history [选项] [历史命令保存文件(就是指定历史命令保存的位置,如果没有指定,那么就会保存在默认目录下,每个用户默认保存的位置不一样)]选项: -c: 清空历史命令(没有特殊情况一般不使用,方便检查) -w: 把缓存中的历史命令写入历史命令保存文件~/.bash_history(root用户下的默认位置)使用history命令就可以看我们以前输入过的命...

2020-04-11 23:11:46 180

原创 数据通信-nat网络地址转换

1:技术背景• IPv4地址已经耗尽。 • 局域网用户普遍使用私有IPv4地址(不可路由),如何访问公网(都需要部署nat才可以上公网)? • 局域网中使用私有IPv4地址的服务器如何对公网提供服务? • 若需要对外隐藏内网的IP,同时内网的特定服务器又需对外提供服务该如何实现? 2:公网IP地址及私有IP地址公网地址: • 公网地址是指可以在Intern...

2020-04-11 13:45:59 386

原创 linux-shell基础(一)脚本运行方式

1:shell是什么?Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统程序,用户可以用Shell来启动,挂起,停止甚至是编写一些程序。这个黑框就相当于一个shellshell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux命令。2:shell的分类Bou...

2020-04-10 23:41:42 215

原创 数据通信-路由基础(2)

1:IP路由的最长匹配原则及路由递归:IP路由查找的最长匹配原则:路由条目的类型:(当路由器在将目的IP地址在路由表中执行查找时,采用的原则是“最长匹配原则”,也就是查找目的IP地址与路由前缀匹配度最长的表项,使用该表项作为最终数据转发的依据。) 主机路由 :就是例如192.168.1.1/32是要后面是32都可以看作是主机路由(标识的是一个点) 子网 :...

2020-04-10 13:30:29 1104

原创 数据通信-路由基础

1:IP路由选择原理路由器的工作内容:路由器知道目标地址;发现到达目标地址的可能的路由;选择最佳路径(路由表);维护路由信息,转发IP数据。IP路由表:初始化情况下,路由器所知的网段,只有其直连接口所在网段。路由器自动将接口所在网段的路由写入路由表,这些路由被称为直连路由(Direct route),它们在路由表中的Protocol为Direct。 直连路由出现在路由表中的前提,是该接口的...

2020-04-09 17:18:01 1003 1

原创 linux-文件系统管理(基本概念以及常使用命令)

1:分区类型主分区:总共最多只能分四个,为了有更多的分区,需要拿出一个来作为扩展分区。扩展分区:只能有一个,也算作主分区的一种,也就是说主分区加扩展分区最多有四个。但是扩展分区不能存储数据和格式化,必须再划分为逻辑分区才能使用。逻辑分区:逻辑分区是在扩展分区中划分的,如果是IDE硬盘。Linux最多支持59个逻辑分区,如果是SCSI硬盘linux最多支持11个逻辑分区。图示如下:...

2020-04-09 00:28:04 196

原创 数据通信-交换基础-VLAN间路由的方法

第一章:通过子接口实现VLAN间的路由 技术背景:VLAN是广播域。而通常两个广播域之间由路由器连接,广播域之间来往的数据包都是有路由器提供中继服务,这被称为:VLAN间路由。 一个VLAN即是一个广播域。 相同VLAN内的设备可以直接进行二层通信,而不同VLAN的设备无法直接通信。要实现VLAN之间的通信,需借助三层设备(具备路由功能的设备),例如...

2020-04-07 15:57:13 310

原创 linux-sudo权限(操作系统命令)

1:sudo权限:root把本来只能超级用户执行的命令赋予普通用户执行sudo的操作对象是系统命令2:sudo使用visudo 实际修改的是 /etc/sudoers文件root ALL= (ALL) ALL用户名 被管理主机的地址= (可使...

2020-04-04 11:41:26 952

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除