C_文件I/O流在 C 语言中,流 (stream) 表示任意输入的源或任意输出的目的地。流是一个抽象的概念,即可以表示存储硬盘上的文件,也可以表示网络端口或者打印设备。
Linux哲学:一切皆文件
文件缓冲操作系统会在内存上为流设置缓冲区。
缓冲区是以先进先出的方式管理数据的。缓冲区分为三种类型:
满缓冲:当缓冲区空时,从输入流中读取数据;当缓冲区满时,向输出流中写入数据。
行缓冲:每次从输入流中读取一行数据;每次向输出流中写入一行数据 (stdin,stdout)。
无缓冲:顾名思义,就是没有缓冲区 (stderr)。
文件指针在C语言中,文件指针是用来处理文件读写操作的一种特殊类型的指针。在使用文件指针之前,需要先定义一个指向 FILE 类型的指针变量,用于表示文件指针。 FILE 类型定义在 stdio.h 头文件中。
123456789101112typedef struct{ short level; // 缓冲区"满"或者"空"的程度 unsigned ...
C_概述编写一个简单的C程序1234567//HelloWorld .c#include <stdio .h> // 预处理指令int main(void) { printf("Hello world .\n"); return 0;}
#include<stdio .h> 是一条预处理指令,表示在程序中 “包含” stdio .h 头文件, 其中有C语言标准输入/输出库的信息。
main函数是程序的入口, main函数中的第一行代码是用来打印信息的。printf函数来自于标准输入/输出库,可以产生格式化的输出。\n是一个转义序列,表示换行。
第二行代码 return 0; 有两个作用:一是终止 main函数。二是程序终止时会向操作系统返回状态码 0 ( 0 表示正常终止,非 0 表示异常终止)。
编译和链接对 C 程序来说,通常包含下面 4 个步骤:
预处理
首先程序会由预处理器 (preprocessor) 进行处理。预处理器执行以 # 开头的指令。主要是把头文件 ...
C_表达式表达式是用来计算某个值的公式,表达式可以用运算符进行连接。
C语言拥有异常丰富的运算符:算术运算符、赋值运算符、关系运算符、判等运算符、逻辑运算符、位运算符等等。
算数运算符算术运算符包含 +, -, *, /, % ,分别表示加,减,乘,除,取余。其中 / 和 % 需要注意:
/ 的两个操作数都是整数,结果也是整数 (向零取整)。因此,1/2 的结果为 0 而不是 0.5。
+, -, *, /,可以用于浮点数,但 % 要求两个操作数都是整数。
%取余运算的结果可能为负数, i%j 的符号总是和 i 的符号相同,比如 -9 % 7 的值为 -2。
运算符的优先级和结合性当表达式包含多个运算符时,C 语言采用优先级来解决歧义性问题。
优先级:* 的优先级高于 +
1i + j * k 等价于 i + (j * k)
当表达式中包含两个或者更多个具有相同优先级的运算符时,对比运算符的结合性进行运算。
左结合:运算符是从左向右结合的(二元运算符大多是左结合的)
12i - j + k 等价于 (i - j) + ki * j / k 等价于 (i * j) / k
...
C_语句在C语言中,语句可以分为以下几种类型:
标签语句:可以通过标签来标记一个语句。C语言中有三种类型的标签:简单标识符后跟冒号(用于goto语句的目标)、case和default标签(用于switch语句中)。
复合语句:也称为块语句,是将多个语句和声明用大括号{ }括起来,形成一个单独的语句块。函数体也是一种复合语句。
表达式语句:由一个可选的表达式后跟分号;构成。如果存在表达式,则该语句可能有值。没有表达式的情况下,语句通常被称为空语句。
选择语句:包括if语句和switch语句,用于根据表达式的值选择执行不同的语句块。
迭代语句:包括while、do-while和for语句,用于重复执行某段代码直到满足特定条件。
跳转语句:包括goto、break、continue和return语句,用于无条件地改变程序的控制流。
选择语句布尔值最初的c语言缺少布尔类型。在 C99 中,定义了 _Bool 类型, _Bool 类型的变量只能赋值为 0 或 1。往 _Bool 类型中存储非零值,会导致该变量赋值为 1。
1_Bool flag = 5; /* flag ...
C_结构体和枚举结构体是一系列值(成员)的集合,值(成员)可以有不同的数据类型。枚举本质上是一种整数类型,只不过给整数值起了名称。
结构体(Structures)结构体的定义结构体是C语言中一种自定义的复合数据类型,允许存储不同类型的数据项。结构体由一组相关的数据项组成,每个数据项可以是不同的数据类型。基本语法:
12345struct 结构体名 { 数据类型1 成员1; 数据类型2 成员2; // 其它成员} 可选的结构体变量列表; //可以直接在可选的结构体变量列表处声明结构体变量名,如:}p1,p2;
例如:
1234567struct Person { char name[50]; int age; float height;};struct Person p1;
结构体变量的初始化结构体变量的初始化可以使用两种方法:逐个成员初始化和整体初始化,未被初始化的成员会被赋值为 0 。
逐个成员初始化:
1234struct Person person1;strcpy(person1.name, ...
README本文章仅用于记录 Hexo 的部分命令与配置
常用命令1hexo clean && hexo g && hexo d
Post Front-matter 配置1234567891011121314151617181920212223242526---title: Hexo #页面标题date: 2023-08-16 9:00:00 #页面创建时间updated: 2024-10-26 23:56:00 #页面更新时间description: 本文章仅用于记录Post Front-matter配置 #描述页面#type: HTTP #标签、分类和友情链接三个页面需要配置categories: Hexo #文章分类tags: Hexo #文章标签top_img: "" #页面顶部图片cover: "" #文章封面,文章缩略图(如果没有设置top_img,文章页顶部将显示缩略图,可设为false/图片地址/留空)keywords: Redis #页面关键字commen ...
GITGit使用查看git状态和后续git建议
1git status
将untracked状态到staged状态
1git add
将staged状态到untracked状态
1git restore --staged
将所提交内容融入分支(unmodify)
1git commit -m " "
“ “中是备注信息
查看所有分支
1git log --oneline --all
1git log --oneline --all --graph
查看分支
1git branch -v
切换分支
1git checkout 主动方
合并分支
1git merge 被动方
将仓库的git拉下来修改后提交上去
1234git pull origin mastergit fetch origin mastergit merge origin/master
安装和配置git1.安装1sudo apt install git
2. 检查配置1git config --list
3. 设置用户名称与邮件地址每一个 Git 的提交都会使用这些信息, ...
Conventional Commits约定式提交规范是一种基于提交信息的轻量级约定。 它提供了一组简单规则来创建清晰的提交历史; 自动化生成 CHANGELOG。这更有利于编写自动化工具。 通过在提交信息中描述功能、修复和破坏性变更, 使这种惯例与 SemVer 相互对应。
提交说明的结构如下所示:
原文:
123<type>[optional scope]: <description>[optional body][optional footer(s)]
译文:
123<类型>[可选 范围]: <描述>[可选 正文][可选 脚注]
<类型>[可选 范围]:(一个空格)<描述>(多个提交内容以分号分割)
提交类型
提交类型
标题
描述
表情符号
发布
包含在变更日志中
feat
特征
一个新功能
✨
minor
true
fix
Bug修复
一个错误修复
🐛
patch
true
docs
文档
仅文档更改
📚
patch如果scope是readme
true
style
风格
...
正则表达式正则表达式简介正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为”元字符”),可以用来描述和匹配字符串的特定模式。
正则表达式是一种用于模式匹配和搜索文本的工具,提供了一种灵活且强大的方式来查找、替换、验证和提取文本数据,可以应用于各种编程语言和文本处理工具中。
简单示例:
我们在写用户注册表单时,只允许用户名包含***字符、数字、下划线和连接字符-***,并设置用户名的长度,我们就可以使用以下正则表达式来设定。
Expression1^[a-zA-Z0-9_-]{3,15}$
^ 表示匹配字符串的开头。
[a-zA-Z0-9_-] 表示字符集,包含小写字母、大写字母、数字、下划线和连接字符 **-**。
{3,15} 表示前面的字符集最少出现 3 次,最多出现 15 次,从而限制了用户名的长度在 3 到 15 个字符之间。
$ 表示匹配字符串的结尾。
正则表达式的模式正则表达式的模式可以包括以下内容:
字面值字符:例如字母、数字、空格等,可以直接匹配它 ...
Nginx一、Nginx的特点和功能1.Nginx的特点
高并发、高性能——基于事件驱动的模型
可扩展性好,支持模块化开发(插件开发)
可靠性高——4个9(99.99%)(阿里云 12个9)
热部署:动态加载配置文件(新替代旧的worker进程)
2. Nginx的功能
访问静态资源:存储在服务器本地的文件(*.html、*.jpeg/*.png、*.mp4/*.flv)
API服务:通过路径的方式,提供计算服务(/s?wd=123、/barbecue/s?)
反向代理:在客户端和服务器之间充当中间层,将客户端的请求转发给后端的多个服务器,并将服务器的响应返回给客户端。
负载均衡:当一个网络或服务器系统面临大量的请求和流量时,负载均衡能够将这些请求分发到不同的服务器上,以避免单一服务器过载而导致性能下降或系统崩溃。
3. Apache与Nginx的对比
Apache
Apache是基于进程的设计:每来一个连接,就会fork子进程进行处理
问题:无法处理大并发的情况
Nginx
Nginx是基于事件驱动的设计:Linux: epoll IO多路复用机制
单线程就可以处理大量连接的 ...