辛勤的蜜蜂永没有时间悲哀。 ——布莱克
目录
\r和\n的区别:
\r:回车
\n:换行
那么这两个有什么区别呢?
(1)让光标从第一行跳到第二行,但是光标只是垂直向下跳,并没有在第二行的开始。这个操作就是换行(\n)。
(2)在第二行让光标跳到最开始的位置,这个操作就是回车(\r)。
当只有\r时的运行结果:
只有回车,我们可以想象到运行的结果是什么样,答案是:什么都不显示。为什么呢?
- 回车之后,光标来到了文本行的开始位置,此时linux的命令行就会从光标处开始,将我们的文本覆盖掉,我们就什么也看不到
当只有\n时的运行结果:
此时test.c文件有\n(行缓冲区内容打印)
此时运行,打印出hello world 这时光标会停3秒
如果没有\n,会先停3秒然后再打印出hello world
无论是否有\n时,都是先走printf再sleep的,当有\n时如果读到了\n的位置就会先将行缓冲区的内容马上打印出来再往下走。
注意:fflush函数可以立马刷新行缓冲区
当\r和\n同时再的时候:
进度条小程序
#include "proc.h" 2 3 4 #define SIZE 102 5 #define STYLE '=' 6 #define ARR ">" 7 8 void process() 9 { 10 const char *lable = "|/-\\"; 11 char bar[SIZE]; 12 memset(bar, '\0', sizeof(bar)); 13 int i = 0; 14 while( i <= 100 ) 15 { 16 printf("[\033[42;32;31m%-100s\033[0m][%d%%][%c]\r", bar, i, lable[i%4]); 17 fflush(stdout); 18 bar[i++] = STYLE; 19 20 usleep(100000);//usleep是微秒,1秒等于1000000微秒 21 } 22 printf("\n"); 23 }
proc.h文件:
#include<stdio.h> #pragma once extern void proc();
git 命令行
检查Linux是否安装git:
git --version
如果没有,安装指令是
sudo yum install -y git
clone一个远端仓库:
复制仓库的链接
在Linux中创建远端仓库:
git clone 链接
提交代码带Git:
git add 文件名
提交当前目录下的所有代码
git commit -m “文字描述”
最后推送到远程:
git push
第一次在Linux提交代码的会出现这个情况:
这里需要你设置邮箱和名字
git config --global user.name"你的名字"
git config --global user .email"你的邮箱"
Linux调试器:gdb的使用
背景
程序的发布方式有两种,debug模式和release模式
Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
debug为可以调试的版本,release为优化后的版本也就是测试版本了
Linux gcc/g++出来的是二进制文件,默认是release版本。
在VS中,我们可以按F10进入调试
在Linux我们依旧可以调试,要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
gdb的使用
gdb 文件名
gcc生成后默认是release版本,因此是不可以调试的
查看调试信息
readelf -S 文件名
gdb调试指令:
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行(逐过程执行)。
s或step:进入函数调用(逐语句执行)
break(b) 行号:在某一行设置断点 break 函数名:在某个函数开头设置断点
d 编号 :删除断点
info break :查看断点信息。
finish:执行到当前函数返回,然后停下来等待命令
print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量:打印变量值。
set var:修改变量的值
continue(或c):从当前位置开始连续而非单步执行程序
run(或r):从开始连续而非单步执行程序
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(或i) breakpoints:参看当前设置了哪些断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
breaktrace(或bt):查看各级函数调用及参数
info(i) locals:查看当前栈帧局部变量的值
quit:退出gdb