linux
axiaobingqiu
这个作者很懒,什么都没留下…
展开
-
linux-socket编程(八)读、写、异常事件发生条件
读、写、异常事件发生条件可读的条件:套接口缓存区有数据可读;连接的读一半关闭,即接受到FIN段,读操作将返回0。如果是监听套接口,已完成连接队列不为空时。套接口上发生了一个错误待处理,错误可以通过getsockopt指定SO_ERROR选项来获取。可写的条件:套接口发送缓存区有空间容纳数据。连接的写一半关闭。即接收到RST段之后,再次调用write操作。套接口上发生了一个错误待处理,错误可以通过getsockopt指定SO_ERROR选项来获取。异常的条件:套接口存在原创 2020-06-21 16:13:59 · 514 阅读 · 0 评论 -
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 · 875 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
linux-socket编程使用到的函数总结
1:wait2:waitpid3:signal4:kill5:recv原创 2020-06-01 22:41:03 · 246 阅读 · 0 评论 -
进程,线程,并行,并发有关知识学习
1:浅谈并行和并发并行:指的是可以同时执行不同的任务。例如上厕所的时候看手机,这里两件事情可以同时执行。并发:指的是交替执行不同的任务。其实并发有点类似于多线程的原理,多线程并非是同时执行多个任务,如果你开两个线程执行,就是在很快的速度下不断的切换这两个任务,已达到"同时执行效果"。所以他们两个的区别就是:一个是交替执行,一个是同时执行。2:进程和线程 使用一个例子来说明进程和线程之间的关系。当你开启了qq,就相当于开启了一个进程,打开支付宝就相当于开启了另一个进程,当你在q...原创 2020-05-18 01:06:55 · 271 阅读 · 0 评论 -
linux-socket编程(三)
1:socket选项REUSEADDR的用法,地址重复利用当你使用上一篇(linux-socket编程(二))的程序实现的时候,结果如下:如果关闭服务器端。再打开的话会出现错误产生的原因是:可以使用REUSEADDR来解决。服务器端尽可能使用REUSEADDR,在绑定之前尽可能使用setsockopt来设置REUSEADDR套接字选项,使用REUSEADDR选项...原创 2020-05-07 09:47:05 · 281 阅读 · 0 评论 -
linux-socket编程(四)
1:流协议与粘包TCP:基于字节流的传输服务,无边界(包与包之间没有边界),所以容易产生粘包,但是不会丢包。粘包的含义:由于TCP在传输数据的时候是无边界的,所以数据对tcp来说就是一堆没有结构区别字节块,因此就会导致如下图所示的情况。这就是粘包。2:粘包产生的原因1.SQ_SNDBUF套接字本身有缓冲区(发送缓冲区,接收缓冲区)2.tcp传送的网络数据最大值MSS大小限制...原创 2020-05-06 23:59:18 · 464 阅读 · 0 评论 -
linux-man命令
在学习socket编程的时候,要经常使用一些函数,这时候需要查看手册来,查看该函数的基本用法,以及参数的含义,和如果参数是一些宏的话,有哪些选项,具体的功能有哪些。这时候就需要使用man这个命令来查看。man命令是linux下的帮助文档,通过man指令可以查看linux中的指令帮助,配置文件帮助和编程帮助等信息。语法: man (选项) (参数)选项:参数:我们输...原创 2020-05-05 13:56:58 · 418 阅读 · 0 评论 -
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 阅读 · 0 评论 -
linux-shell(16)-sed命令
sed是一种几乎在所有UNIX平台,的轻量级流编辑器。sed主要是用来将数据进行选取,替换,删除,新增的命令。sed [选项] '[动作]' 文件选项:-n: 一般sed命令会把所有数据都输出到屏幕,如果加入此选项,则只会把经过sed命令处理过的行输出到屏幕。 -e: 允许对输入数据应用多条sed命令编辑 -i: 用sed的修改结果直接修改...原创 2020-04-29 23:35:08 · 151 阅读 · 0 评论 -
linux-shell(15)字符截取命令
1:cut命令:用来显示行中指定部分,删除文件中指定字段。用来显示文件的内容。cut [选项] 文件名选项:例子:test2.txt2:printf命令printf命令格式化输出结果到标准输出printf [选项] [参数]参数:包括输出格式和输出字符串,输出格式:指定数据输出时的格式,输出字符:指定要输出的数据格式替代符:转义字符:...原创 2020-04-29 14:32:16 · 328 阅读 · 0 评论 -
linux-shell(14) 基础正则表达式
1:正则表达式与通配符正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep, awk, sed等命令可以支持正则表达式。通配符用来匹配符合条件的文件名,通配符是完全匹配。ls, find, cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。2:基础正则表达式元字符 作用 * 前一个字符串匹配0次或者任意多次 . ...原创 2020-04-27 21:38:35 · 426 阅读 · 0 评论 -
linux-查看终端的命令以及ssh命令
可以使用who命令和w命令w功能最全,能显示用户登录名,终端标志,星期几登录和具体登录时间,闲置时间。用户正在指向的程序,占用CPU时间,系统的运行时间和平均负载:who仅显示用户登录名,终端标志,和登录日期和时间,pst/x是因为使用远程终端登录的。也可以直接使用tty来查看当前所使用的终端好的博客解释终端:https://blog.csdn.net/yazhoure...原创 2020-04-26 23:29:27 · 5359 阅读 · 0 评论 -
linux-shell(13)-环境变量配置文件
环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH,HISTSIZE(历史变量保存条数),PSI,HOSTNAME(主机名)等默认环境变量。可以使用set或者env开查看变量1:直接让配置文件生效,不需要重启命令:source 配置文件 或者 . 配置文件(点和配置文件之间有空格)2:环境变量配置文件有哪几个:/etc/profile/etc/...原创 2020-04-25 16:11:32 · 477 阅读 · 0 评论 -
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 阅读 · 0 评论 -
linux-shell(11)-Bash数值运算与运算符
计算两个数相加1、declare声明变量类型declare [+/-] [选项] 变量名选项: -: 给变量设定类型属性 +: 取消变量的类型属性 -i : 将变量声明为整数型 -x: 将变量声明为环境变量 -p: 显示指定变量的被声明的类型2,使用...原创 2020-04-24 22:54:41 · 183 阅读 · 0 评论 -
linux-shell(10)-Bash预定义变量
位置参数变量相当于预定义变量的一部分。1:预定义变量预定义变量 作用 $? 最后一次执行命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是那个数,由命令自己来决定),则证明上一个命令执行不正确。 $$ 当前进程的进程号(PID) $! 后台运行的最后一个进程的进程号(PID) 使用$?例子:examp...原创 2020-04-24 16:01:28 · 223 阅读 · 0 评论 -
linux-shell(9)-Bash位置参数变量
位置参数变量(名称固定,作用固定,主要是为了向脚本中传递值)位置参数变量 作用 $n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10} $* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体。 $@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待 $# 这个变量代表命令...原创 2020-04-23 18:16:14 · 219 阅读 · 0 评论 -
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 · 182 阅读 · 0 评论 -
linux内核的功能
1:内存管理:内存分配调用:包括静态分配方式,动态分配方式内存保护:确保每个程序在自己的内存空间运行,互不干扰。方法是使用界限寄存器或存储保护键地址映射:实现程序的逻辑地址与存储器物理地址之间的映射功能内存扩充:从逻辑上扩充物理内存,以允许比物理内存更大的程序在机器内运行,为此操作系统必须具有:请求调入功能与置换功能。2:进程管理进程控制:包括进程创建,进程撤销,进程阻塞,...原创 2020-04-20 23:37:26 · 261 阅读 · 0 评论 -
linux-shell(7)-Bash变量-用户自定义变量
1:什么是变量 变量是计算机内存单元,其中存放的值可以改变。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息。2:变量设置规则 a. 变量名称可以由字母,数字和下划线组成,但是不能以数字开头。b.在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须制定变量类型为数值型。c.变量用等号连接值,等号左右两侧不能有空格。d...原创 2020-04-19 20:10:49 · 293 阅读 · 0 评论 -
linux-shell(6)-Bash通配符与其他特殊符号
1:通配符(匹配文件名)通配符 作用 ? 匹配一个任意字符 * 匹配0个或任意多个任意字符,也就是可以匹配任何内容 [] 匹配中括号中任意一个字符。例如:[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c [-] 匹配中括号中任意一个字符,-代表一个范围。例如:[a-z]代表匹配一个小写字母。 [^] 逻辑非,代表匹配不是中括号...原创 2020-04-19 18:57:03 · 236 阅读 · 0 评论 -
linux-shell(5)-Bash多命令顺序执行与管道符
1:多命令顺序执行(可以简化操作)多命令执行符 格式 作用 ;(分号) 命令1;命令2 多个命令顺序执行,命令之间没有任何逻辑联系 && 命令1&&命令2 逻辑与,当命令1正确执行,则命令2才会执行,当命令1执行不正确,则命令2不会执行 || 命令1||命令2 逻辑或,当命令1执行不正确...原创 2020-04-18 20:17:13 · 1009 阅读 · 0 评论 -
linux-shell(四)-Bash基本功能-输入输出重定向
1:标准输入输出。设备 设备文件名 文件描述符 类型 键盘 /dev/stdin 0 标准输入 显示器 /dev/stdout 1 标准输出 显示器 /dev/stderr 2 标准错误输出 2:输出重定向(意思就是本来应该输出到显示器,现在输出到一个文件里面):目的是方便管理,但是这些命令必须有输出...原创 2020-04-12 20:50:27 · 146 阅读 · 0 评论 -
linux-shell(三)Bash基本命令-命令别名与常用快捷键
1:命令别名alias 别名=“原命令” 设定命令别名;以命令行定义的别名只会零时生效,重启就会消失。alias 查询命令别名 之所以可以直接使用命令是因为使用了PATH环境变量。命令执行顺序:第一顺位执行用绝对路径或者相对路径执行的命令,第二顺位执行别名,第三顺位执行Bash的内部命令例如cd使用whereis找...原创 2020-04-11 23:46:53 · 149 阅读 · 0 评论 -
linux-shell基础(二)Bash基本功能-历史命令与补全
1:历史命令history [选项] [历史命令保存文件(就是指定历史命令保存的位置,如果没有指定,那么就会保存在默认目录下,每个用户默认保存的位置不一样)]选项: -c: 清空历史命令(没有特殊情况一般不使用,方便检查) -w: 把缓存中的历史命令写入历史命令保存文件~/.bash_history(root用户下的默认位置)使用history命令就可以看我们以前输入过的命...原创 2020-04-11 23:11:46 · 180 阅读 · 0 评论 -
数据通信-nat网络地址转换
1:技术背景• IPv4地址已经耗尽。 • 局域网用户普遍使用私有IPv4地址(不可路由),如何访问公网(都需要部署nat才可以上公网)? • 局域网中使用私有IPv4地址的服务器如何对公网提供服务? • 若需要对外隐藏内网的IP,同时内网的特定服务器又需对外提供服务该如何实现? 2:公网IP地址及私有IP地址公网地址: • 公网地址是指可以在Intern...原创 2020-04-11 13:45:59 · 386 阅读 · 0 评论 -
linux-shell基础(一)脚本运行方式
1:shell是什么?Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统程序,用户可以用Shell来启动,挂起,停止甚至是编写一些程序。这个黑框就相当于一个shellshell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux命令。2:shell的分类Bou...原创 2020-04-10 23:41:42 · 216 阅读 · 0 评论 -
数据通信-路由基础(2)
1:IP路由的最长匹配原则及路由递归:IP路由查找的最长匹配原则:路由条目的类型:(当路由器在将目的IP地址在路由表中执行查找时,采用的原则是“最长匹配原则”,也就是查找目的IP地址与路由前缀匹配度最长的表项,使用该表项作为最终数据转发的依据。) 主机路由 :就是例如192.168.1.1/32是要后面是32都可以看作是主机路由(标识的是一个点) 子网 :...原创 2020-04-10 13:30:29 · 1114 阅读 · 0 评论 -
数据通信-路由基础
1:IP路由选择原理路由器的工作内容:路由器知道目标地址;发现到达目标地址的可能的路由;选择最佳路径(路由表);维护路由信息,转发IP数据。IP路由表:初始化情况下,路由器所知的网段,只有其直连接口所在网段。路由器自动将接口所在网段的路由写入路由表,这些路由被称为直连路由(Direct route),它们在路由表中的Protocol为Direct。 直连路由出现在路由表中的前提,是该接口的...原创 2020-04-09 17:18:01 · 1006 阅读 · 1 评论 -
linux-文件系统管理(基本概念以及常使用命令)
1:分区类型主分区:总共最多只能分四个,为了有更多的分区,需要拿出一个来作为扩展分区。扩展分区:只能有一个,也算作主分区的一种,也就是说主分区加扩展分区最多有四个。但是扩展分区不能存储数据和格式化,必须再划分为逻辑分区才能使用。逻辑分区:逻辑分区是在扩展分区中划分的,如果是IDE硬盘。Linux最多支持59个逻辑分区,如果是SCSI硬盘linux最多支持11个逻辑分区。图示如下:...原创 2020-04-09 00:28:04 · 196 阅读 · 0 评论 -
数据通信-交换基础-VLAN间路由的方法
第一章:通过子接口实现VLAN间的路由 技术背景:VLAN是广播域。而通常两个广播域之间由路由器连接,广播域之间来往的数据包都是有路由器提供中继服务,这被称为:VLAN间路由。 一个VLAN即是一个广播域。 相同VLAN内的设备可以直接进行二层通信,而不同VLAN的设备无法直接通信。要实现VLAN之间的通信,需借助三层设备(具备路由功能的设备),例如...原创 2020-04-07 15:57:13 · 310 阅读 · 0 评论 -
linux-sudo权限(操作系统命令)
1:sudo权限:root把本来只能超级用户执行的命令赋予普通用户执行sudo的操作对象是系统命令2:sudo使用visudo 实际修改的是 /etc/sudoers文件root ALL= (ALL) ALL用户名 被管理主机的地址= (可使...原创 2020-04-04 11:41:26 · 952 阅读 · 0 评论 -
linux-文件系统属性chattr权限
1:chattr命令格式chattr [+-=] [选项] 文件或目录名+:增加权限 -:删除权限=:等于某权限选项:i : 如果对文件设置i属性,只能查看文件,不允许对文件进行删除,改名,也不能添加和修改数据,可以限制root;如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件。a:如果对文件设置a属性,那么只能在文件中增加数据,但是...原创 2020-04-03 23:35:35 · 153 阅读 · 0 评论 -
linux-文件特殊权限(SUID, SGID, SBIT)
1:SetUID的功能只有可以执行的二进制程序才能设定SUID权限。(给其他文件设置没有意义),命令执行者要对该程序拥有x(执行)权限,命令执行者在执行该程序时获得该程序文件所有着的身份(在执行程序的过程中灵魂附体为文件的属主,相当于变身命令),SetUID权限指在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。passwd命令拥有SetUID权限,所以普通用户可以修改自己的...原创 2020-03-31 11:44:57 · 709 阅读 · 0 评论 -
linux-unix网络编程-运行上面的程序
首先在https://github.com/unpbook/unpv13e上面下载下来,一般首先读取readme文件,根据上面的内容就可以运行这个程序了。过程如下:1:解压:tar -xvf unpv13e.tar.gz2:转到unpv13e目录下 :cd unpv13e 使用ls来查看:3:然后使用 ./configure 尝试找出所有实现差异4: cd...原创 2020-03-29 16:20:27 · 176 阅读 · 0 评论 -
linux-ACL权限
1:ACL权限简介与开启主要是用来解决身份不足的问题。不考虑身份(所有人,所属组,其他人);只有文件所在的分区支持ACL权限,用户才可以使用ACL2:查看分区ACL权限是否开启 dumpe2fs -h 分区;(查看分区的详细信息) dumper2fs命令是查询指定分区详细文件系统信息的命令,-h表示:仅显示超级块中信息,而不显示磁盘块组的详细信息。df -h 用...原创 2020-03-26 23:42:26 · 610 阅读 · 0 评论 -
linux-用户组管理命令
1:添加用户组:groupadd [选项] 组名选项:-g GID: 指定组ID 2:修改用户组:groupmod [选项] 组名(一般不用)选项:-g GID: 修改组ID -n 新组名: 修改组名 3:删除用户组 groupdel 组名 已经删除掉如果这个组中有初始用户存在就不能删除,附加用户不影响删除 ...原创 2020-03-24 22:29:23 · 111 阅读 · 0 评论