- 博客(27)
- 收藏
- 关注
原创 Linux 17:高级IO
阻塞IO是最常见的IO模型非阻塞IO:如果内核还未将数据准备好,系统调用仍然会直接返回,并且返回EWOULDBLOCK错误码。非阻塞IO往往需要程序员循环的方式反复尝试读写文件描述符,这个过程称为轮询。这对CPU来说是较大的浪费,一般只有特定场景下才使用。信号驱动IO:内核将数据准备好的时候,使用SIGIO信号通知应用程序进行IO操作。IO多路转接:虽然从流程图上看起来和阻塞IO类似。实际上最核心在于IO多路转接能够同时等待多个文件描述符的就绪状态。
2024-07-29 19:03:42 721
原创 Linux 16:HTTPS协议原理
加密就是把明⽂(要传输的信息)进⾏⼀系列变换,⽣成密⽂。解密就是把密⽂再进⾏⼀系列变换,还原成明⽂。在这个加密和解密的过程中,往往需要⼀个或者多个中间的数据,辅助进⾏这个过程,这样的数据称为密钥。加密解密到如今已经发展成⼀个独⽴的学科:密码学。而密码学的奠基⼈,也正是计算机科学的祖师爷之⼀,艾伦·⻨席森·图灵。数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash函数)对信息进行运算,生成⼀串固定长度的数字摘要。数字指纹并不是⼀种加密机制,但可以用来判断数据有没有被窜改。
2024-07-27 16:08:27 644
原创 Linux 15:网络编程3
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称。域名使用 . 连接com:一级域名。表示这是一个企业域名。同级的还有"net"(网络提供商),"org"(非盈利组织) 等。baidu:二级域名,公司名。www:只是一种习惯用法。之前人们在使用域名时,往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式,来表示主机支持的协议。数据链路层的作用:两个设备(同一种数据链路节点)之间进行传递数据。以太网是一种技术标准;
2024-07-26 18:53:07 721
原创 Linux 13:网络编程1
在IP数据包头部中,有两个IP地址,分别叫做源IP地址,和目的IP地址。我们光有IP地址就可以完成通信了嘛?想象一下发qq消息的例子,有了IP地址能够把消息发送到对方的机器上,但是还需要有一个其他的标识来区分出,这个数据要给哪个程序进行解析。
2024-07-20 19:09:44 1075 1
原创 Linux 11:多线程1
为了实现互斥锁操作,大多数体系结构都提供了swap或exchange指令,该指令的作用是把寄存器和内存单元的数据相交换,由于只有一条指令,保证了原子性,即使是多处理器平台,访问内存的总线周期也有先后,一个处理器上的交换指令执行时另一个处理器的交换指令只能等待总线周期。需要注意,pthread_exit或者return返回的指针所指向的内存单元必须是全局的或者是用malloc分配的,不能在线程函数的栈上分配,因为当其它线程得到这个返回指针时线程函数已经退出了。要做到这三点,本质上就是需要一把锁。
2024-07-19 18:02:16 946
原创 Linux 10:进程信号
kill -l每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到,例如其中有定义 #define SIGINT 2编号34以上的是实时信号,本章只讨论编号34以下的信号,不讨论实时信号。这些信号各自在什么条件下产生,默认的处理动作是什么,在signal(7)中都有详细说明: man 7 signal。
2024-07-18 18:23:07 1079
原创 Linux 08:文件系统和动静态库
我们使用ls -l的时候看到的除了看到文件名,还看到了文件元数据。ls -l读取存储在磁盘上的文件信息,然后显示出来。其实这个信息除了通过这种方式来读取,还有一个stat命令能够看到更多信息。上面的执行结果有几个信息需要解释清楚:为了能解释清楚inode我们先简单了解一下文件系统:Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。
2024-07-15 21:42:49 951
原创 Linux 07:基础IO
所以,只要拿着文件描述符,就可以找到对应的文件。printf、fwrite是库函数, write是系统调用,库函数在系统调用的“上层”, 是对系统调用的“封装”,但是 write没有缓冲区,而 printf、fwrite 有,足以说明,该缓冲区是二次加上的,又因为是C,所以由C标准库提供。中输出,但是stdout底层访问文件的时候,找的还是fd:1, 但此时,fd:1下标所表示内容,已经变成了myfile的地址,不再是显示器文件的地址,所以,输出的任何消息都会往文件中写入,进而完成输出重定向。
2024-07-15 19:40:30 969
原创 Linux 06-01:简易shell编写
用下图的时间轴来表示事件的发生次序。shell由标识为sh的方块代表,它随着时间的流逝从左向右移动。shell从用户读入字符串"ls"。shell建立一个新的进程,然后在那个进程中运行ls程序并等待那个进程结束。然后shell读取新的一行输入,建立一个新的进程,在这个进程中运行程序 并等待这个进程结束。根据这些思路,和我们前面的学的技术,就可以自己来实现一个shell了。这是一个及其简易的示例代码,没有任何的差错控制,健壮性极弱,仅为示范。考虑一下这个与shell典型的互动:ls、ps。
2024-07-15 16:19:16 282
原创 Linux 06:进程控制
在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。返回值:子进程中返回0,父进程返回子进程id,出错返回-1。当一个进程调用fork之后,就有两个二进制代码相同的进程。而且它们都运行到相同的地方。这里看到了三行输出,一行before,两行after。进程43676先打印before消息,然后它有打印after。另一个after消息有43677打印的。注意到进程43677没有打印before,为什么呢?
2024-07-13 15:53:06 554
原创 Linux 05:进程地址空间
相信大家都看过这样的一张图:可是对他可能缺乏更深一层的理解。我们发现,父子进程,输出地址是一致的,但是变量内容不一样!OS必须负责将转化成。
2024-07-11 13:41:39 341
原创 Linux 03:vim的使用
正常模式插入模式底行模式一共有12种总模式,大家下来可以研究一下vim操作打开,关闭,查看,查询,插入,删除,替换,撤销,复制等等操作。
2024-07-06 18:32:19 586
原创 Linux 02:目录的权限
目录的可执行权限(-x)是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)。而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
2024-07-06 14:24:22 614
原创 MySQL 10:索引、视图、用户管理
索引:提高数据库的性能,索引是物美价廉的东西了。不用加内存,不用改程序,不用调sql,只要执行正确的,查询速度就可能提高成百上千倍。但是天下没有免费的午餐,查询速度的提高是以插入、更新、删除的速度为代价的,这些写操作,增加了大量的IO。所以它的价值,在于提高一个海量数据的检索速度。
2024-05-13 21:14:37 937 1
原创 MySQL 06:表的增删查改
表的增删查改有CRUD四类操作 : Create(创建),Retrieve(读取),Update(更新),Delete(删除)
2024-05-11 13:33:07 894 1
原创 MySQL 05:表的约束
真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。表的约束很多,这里主要介绍如下几个:null/not null,default,comment,zerofill,
2024-05-06 09:16:10 1826
原创 MySQL 03:表的操作
字符集collate校验规则engine存储引擎;表示列名表示列的类型字符集,如果没有指定字符集,则以所在数据库的字符集为准collate校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准存储引擎,如果没有指定存储引擎,则使用innoDB作为存储引擎(MySQL的默认存储引擎可被修改)关于数据类型由下一篇文章进行详细介绍。
2024-05-04 08:05:36 358
原创 Linux 01:常见指令
命令名称作用ls对于目录,该命令列出该目录下的所有子目录与文件对于文件,将列出文件名以及其他信息pwd显示用户当前所在的目录cd改变工作目录touch可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件mkdir创建目录rmdir删除空目录rm删除文件或目录man访问Linux手册页cp复制文件或目录mv文件重命名;文件移动cat查看目标文件的内容more查看目标文件的内容(可以向后翻页)less查看目标文件的内容(可以向前向后翻页)head。
2024-04-30 21:54:04 842
原创 MySQL 08:复合查询
在实际的开发过程中只对一张表进行查询是远远不够的。本篇文章以scott数据库作为示例,演示MySQL中的多表查询。(可以通过保存下方代码到文件中,在MySQL通过source命令构建scott数据库)
2024-04-29 22:16:09 225
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人