当前位置: 首页 > news >正文

六十天Linux从0到项目搭建(第八天)(缓冲区、gitee提交)

一 缓冲区,C中有很多字符a. 可显字符 b.控制字符

  • 在 C 语言 中,字符可以分为 可显字符(Printable Characters) 和 控制字符(Control Characters),它们通常存储在 缓冲区(Buffer) 中(如输入/输出缓冲区)。以下是详细的分类和说明:

1. 缓冲区(Buffer)

  • 定义:临时存储数据的内存区域(如键盘输入、文件读取时的中间存储)。

  • 常见场景

    • 输入缓冲区scanf()getchar() 读取数据时暂存。

    • 输出缓冲区printf() 写入数据时暂存(直到遇到 \n 或手动刷新)。

  • 示例

    char buffer[100];
    fgets(buffer, sizeof(buffer), stdin);  // 从输入流读取一行到缓冲区

2. 字符分类

(a) 可显字符(Printable Characters)
  • 定义:能在终端/屏幕上显示出来的字符。

  • 范围

    • ASCII 32~126:包括字母、数字、标点符号等。

    • 例如:Az3!, (空格)。

  • 判断函数

    #include <ctype.h>
    int isprint(int c);  // 若为可显字符,返回非零值
(b) 控制字符(Control Characters)
  • 定义:用于控制设备(如终端、打印机)的特殊字符,不可直接显示。

  • 范围

    • ASCII 0~31 及 127(如 \n\t\b)。

    • 例如:\a(响铃)、\r(回车)、\0(字符串结束符)。

  • 判断函数

    #include <ctype.h>
    int iscntrl(int c);  // 若为控制字符,返回非零值

3. 常见控制字符示例

字符ASCII 值作用
\n10换行(Newline)
\r13回车(Carriage Return)
\t9水平制表符(Tab)
\b8退格(Backspace)
\00字符串终止符(Null)
\a7响铃(Alert)

4. 代码示例:检测字符类型

#include <stdio.h>
#include <ctype.h>

int main() {
    char c = '\t';  // 控制字符示例

    if (isprint(c)) {
        printf("'%c' 是可显字符\n", c);
    } else if (iscntrl(c)) {
        printf("'\\t' 是控制字符\n");  // 注意:控制字符可能无法直接打印
    }

    return 0;
}

输出

'\t' 是控制字符

5. 特殊问题:\r 和 \n 的区别

字符说明
\r回车(Carriage Return),将光标移动到行首(Linux/Windows 换行需配合 \n)。
\n换行(Newline),将光标移动到下一行(Unix/Linux 的换行符)。

不同系统的换行符

  • Windows\r\n(回车+换行)。

  • Unix/Linux\n(仅换行)。

  • Mac(旧版)\r(仅回车)。


6. 缓冲区的刷新(Flush)

  • 行缓冲(Line Buffering):遇到 \n 时刷新缓冲区(如终端输出)。

    printf("Hello\n");  // 立即输出(因为有 \n)
  • 全缓冲(Full Buffering):缓冲区满时刷新(如文件写入)。

  • 无缓冲(Unbuffered):立即输出(如 stderr)。

  • 手动刷新

    fflush(stdout);  // 强制刷新输出缓冲区

7. 应用场景

  • 输入处理:过滤控制字符(如读取密码时忽略 \b)。

  • 文件操作:处理不同系统的换行符(Windows vs Linux)。

  • 终端控制:使用 \r 实现进度条(覆盖当前行)。


总结

概念说明
缓冲区临时存储数据的内存区域,减少直接 I/O 操作。
可显字符可打印的字符(字母、数字、符号),isprint() 检测。
控制字符控制设备行为的特殊字符(如 \n\t),iscntrl() 检测。
\r vs \n回车 vs 换行,不同系统处理方式不同。
缓冲区刷新\nfflush() 或缓冲区满时触发。

二 提交到远程仓库gitee 

Gitee(码云)是国内常用的 Git 托管平台,类似于 GitHub。以下是完整的 命令行操作流程,涵盖从本地仓库创建到推送到 Gitee 的步骤。


前提条件

  1. 已安装 Git

    git --version  # 检查是否安装

    如果未安装,在 Ubuntu 上运行:

    sudo apt update && sudo apt install git

完整操作流程 

  • 访问 Gitee 官网 注册账号。
  • 在 Gitee 上 创建一个新仓库

  • 配置 Git 全局信息(如果未设置)
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
  • 新建个目录,把远端仓库的所有内容都克隆过来
mkdir test_git
cd test_git/
git clone https://gitee.com/drayz/test.git

ls  
test #显示
  •  如果不小心删了也没啥,本地仓库不影响远端
  • 克隆过来的远端仓库本质上就是个.get文件
ls -a
#显示
.git/
.gitignore
LICENSE
README.en.md
README.md
  • tree命令.git可以看到仓库的一些信息
tree .get
#显示
└── refs
    ├── heads
    │   └── master  #单分支
    ├── remotes
    │   └── origin  #remotes指向origin,说明本地仓库和远端关联
    │       └── HEAD
    └── tags  #标签

  •  现在写一个hello.c文件,现在次文件还没有被仓库所管理,git add . 添加当前目录所有没有被添加的文件到仓库
vim hello.c
ls           #显示:hello.c  LICENSE  README.en.md  README.md
git add .
  • commit提交(把文件提交到本地git)
git commit -m "测试"
#显示
[master fad1311] 测试
 1 file changed, 8 insertions(+)
 create mode 100644 hello.c
  • push推送到远端,和本地仓库保持一致
git push   
Username for 'https://gitee.com': drayz   #你的gitee用户名
Password for 'https://drayz@gitee.com':   #密码
#显示
remote: [session-c443ab8f] drayz: Incorrect username or password (access token)
fatal: Authentication failed for 'https://gitee.com/drayz/test.git/'
cyx@VM-0-9-ubuntu:~/test/test$ git push 
Username for 'https://gitee.com': drayz
Password for 'https://drayz@gitee.com': 
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 2 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 350 bytes | 350.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 254fb1b9
To https://gitee.com/drayz/test.git
   8b2f2f0..fad1311  master -> master

其他操作

  • 查看日志 
git log
  •  查看当前仓库状态
git status

相关文章:

  • 让 AI 更智能的检索增强生成(Retrieval-Augmented Generation)
  • 组态软件之万维组态介绍(web组态、html组态、vue2/vue3组态、组态软件、组态编辑器)
  • Redis 集群配置
  • 代码随想录算法训练营Day12 | Leetcode 226翻转二叉树、101对称二叉树、104二叉树的最大深度、111二叉树的最小深度
  • PHP框架 ThinkPHP 漏洞探测分析
  • 基于SpringBoot+Vue的在教务管理(课程管理)系统+LW示例
  • 技术迭代、流量困境与营销突破:基于开源AI大模型与S2B2C模式的创新路径研究
  • HCIA-AI人工智能笔记4:神经网络类型
  • SpringSecurity + OAuth2 限制一个用户(同端互斥)登录
  • c# winform 提高界面加载速度
  • 毕设知识点
  • 图解AUTOSAR_SWS_UDPNetworkManagement
  • 探索抓包利器ProxyPin,实现手机APP请求抓包,支持https请求
  • Pyecharts入门之绘制地图数据
  • 基于赛灵思 Xilinx RFSoC 的 VPX 6U 高速数据采集模块技术讨论
  • 查看linux系统文件描述符限制
  • 以鸿道Intewell工业操作系统为核心,构建AI机器人新生态
  • 34.[前端开发-JavaScript基础]Day11-王者轮播图-书籍购物车-BOM对象-JSON
  • 知识补充
  • 《Operating System Concepts》阅读笔记:p483-p488
  • 揭秘拜登退选内幕新书引争议,“垃圾信息在四处传播”?
  • 证监会副主席李明:近期将出台深化科创板、创业板改革政策措施
  • 义乌至迪拜“铁海快线+中东快航”首发,物流成本降低18%
  • 国宝文物子弹库帛书二、三卷从美启程,18日凌晨抵京
  • 土耳其、美国、乌克兰三边会议开始
  • 王东杰评《国家与学术》︱不“国”不“故”的“国学”