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

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

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

1. 缓冲区(Buffer)

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

  • 常见场景

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

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

  • 示例

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

2. 字符分类

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

  • 范围

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

    • 例如:A, z, 3, !, (空格)。

  • 判断函数

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

  • 范围

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

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

  • 判断函数

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

3. 常见控制字符示例

字符 ASCII 值 作用
\n 10 换行(Newline)
\r 13 回车(Carriage Return)
\t 9 水平制表符(Tab)
\b 8 退格(Backspace)
\0 0 字符串终止符(Null)
\a 7 响铃(Alert)

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

cpp 复制代码
#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 时刷新缓冲区(如终端输出)。

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

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

  • 手动刷新

    cpp 复制代码
    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

    bash 复制代码
    git --version  # 检查是否安装

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

    bash 复制代码
    sudo apt update && sudo apt install git

完整操作流程

  • 访问 Gitee 官网 注册账号。
  • 在 Gitee 上 创建一个新仓库
  • 配置 Git 全局信息(如果未设置)
bash 复制代码
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
  • 新建个目录,把远端仓库的所有内容都克隆过来
bash 复制代码
mkdir test_git
cd test_git/
git clone https://gitee.com/drayz/test.git

ls  
test #显示
  • 如果不小心删了也没啥,本地仓库不影响远端
  • 克隆过来的远端仓库本质上就是个.get文件
bash 复制代码
ls -a
#显示
.git/
.gitignore
LICENSE
README.en.md
README.md
  • tree命令.git可以看到仓库的一些信息
bash 复制代码
tree .get
#显示
└── refs
    ├── heads
    │   └── master  #单分支
    ├── remotes
    │   └── origin  #remotes指向origin,说明本地仓库和远端关联
    │       └── HEAD
    └── tags  #标签
  • 现在写一个hello.c文件,现在次文件还没有被仓库所管理,git add . 添加当前目录所有没有被添加的文件到仓库
bash 复制代码
vim hello.c
ls           #显示:hello.c  LICENSE  README.en.md  README.md
git add .
  • commit提交(把文件提交到本地git)
bash 复制代码
git commit -m "测试"
#显示
[master fad1311] 测试
 1 file changed, 8 insertions(+)
 create mode 100644 hello.c
  • push推送到远端,和本地仓库保持一致
bash 复制代码
git push   
Username for 'https://gitee.com': drayz   #你的gitee用户名
Password for 'https://[email protected]':   #密码
#显示
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://[email protected]': 
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

其他操作

  • 查看日志
bash 复制代码
git log
  • 查看当前仓库状态
bash 复制代码
git status
相关推荐
逾非时5 分钟前
CentOS 7 换源
linux·运维·阿里云·centos
快去睡觉~31 分钟前
Linux之数据链路层
linux·运维·网络
lljss20201 小时前
70. Linux驱动开发与裸机开发区别,字符设备驱动开发
linux·驱动开发
末央&1 小时前
【Linux】了解基础指令(超详细)
linux·运维·服务器
不搞数学的汤老师1 小时前
Linux 文件系统全解析
linux
9毫米的幻想2 小时前
【Linux系统】—— 进程状态
linux·运维·服务器
花落已飘2 小时前
RK3568 pinctrl内容讲解
linux·设备树·rk3568
白悠离2 小时前
hackmyvm-JO2024
linux·web安全·网络安全
SecPulse3 小时前
Linux安装Cmake (Centos 7.9)
linux·运维·centos·cmake·流影
Tee xm3 小时前
清晰易懂的Rust安装与配置教程
linux·windows·macos·rust