Linux C从入门到精通(入土)
-
简单认识Linux及其常见的操作命令
1.1 Linux的特点
开源的、软硬件可裁剪、多用户、多任务、分时操作系统。
1.2 嵌入式系统
以计算机应用为中心,软硬件可裁剪的专用计算机系统。对体积、功耗、性能有一定要求。
1.3 Linux基本操作命令
1. 查看文件 ls:列出当前路径下的文件
Ls-i:查看文件的inode号;ls-a:列出当前路径下的所有文件;
Ls-lh:查看文件的详细信息,文件大小带单位;
Ls-l:查看文件的详细信息。
2. 文件的类型:bcd-lsb
b:块设备文件;c:字符设备文件;d:文件夹;-:普通文件;
l:链接文件;s:套接字文件;b管道文件。
3. 改变路径 cd 目录名:切换到指定目录下
Cd :切换到用户主目录;cd/home/hq:切换到用户主目录;
Cd ~:切换到用户主目录;
Cd/:切换到根目录;cd -:切换到上一次操作的路径;
Cd.:切换到当前路径;cd…:切换到上一级目录。
4. 创建文件及文件夹
1. 创建目录文件 mkdir :创建一个目录文件
Mkdir -p 目录1/目录2/目录3……创建多级目录
2. 创建普通文件 touch 文件名(需要指定后缀):创建普通文件
touch 文件1 文件3 文件3……创建多个普通文件。
5. 删除文件 rm 文件名 :删除一个普通文件
Rm 目录名 -p:删除目录文件。
6. 复制 cp
Cp 文件名 新文件名:将文件在当前路径下复制一份;
Cp 文件名 路径 :将文件复制到指定路径下
注:若复制的时文件夹需要加 -r选项。
7. 移动或重命名 mv
Mv 文件名 路径:将文件移动到指定的路径下;
Mv 文件名 新文件名:将文件重命名。
注:mv对文件夹的操作不需要加 -r。
8. 常用快捷方式
1. 清屏:ctrl+‘l’ ;clear清屏命令。
2. 自动补全:tab键;
3. 打开终端、退出终端
Ctrl+shift+‘n’ :打开一个同路径的终端;
Ctrl+alt+‘t’ :打开一个以主目录为路径的新终端;
Ctrl+‘d’ :关闭终端;
Exit命令也可以退出终端。
9. Vi编辑器 gedit
1. gedit:gedit 文件名 以记事本方式打开文件
2. vi(vim)vi(vim)文件名 进入命令行模式
三种模式:命令行模式、编辑模式、底行模式
Vi打开文件进入的就是命令行模式;
命令行模式下用i/a/o进入编辑模式;
底行模式下用shift+:可以进入底行模式;
编辑模式下,用esc进入退出到命令行模式,在shift+:切换到底行模式。
命令行模式:复制、粘贴、剪切、删除、光标移动。
yy:复制一行;nyy:复制n行;
dd:删除或剪切一行;ndd:删除或剪切n行;
p:粘贴;u:撤销; ctrl+‘r’:反撤销;
gg:光标定位文件开头;G:光标定位最后一行开头。
编辑模式:i/I a/A o/O进入编辑模式。
底行模式:保存、退出、替换、复制
保存 :w ;退出 :q; 保存并退出 :wq、:x;
强制退出:!q;文件另存:w 文件名;分屏:vsp;
保存退出所有分屏:wqa;
复制第n行到第m行的内容:n,my;
删除第n行到第m行的内容:n,md;
定位到第n行:n;高亮显示:/world;去除高亮:noh;
将文件中所有的world1替换成world2:%s/world/world/g
%:全文;s:替换所有;g:一行中所有。 -
C语言基础1
-
计算机数据的表示 数值型、非数值型
-
数值型:十进制、八进制、十六进制、二进制
十进制转二进制:除2倒取余,8421法则;
二进制转十进制:基数*2^权;
八进制转二进制:一个八进制等于三个二进制位;
二进制转八进制:三个二进制等于一个八进制位;
十六进制转二进制:一个十六进制等于四个二进制位;
二进制转十六进制:四个二进制位等于一个十六进制位。 -
非数值型数据 运算符、标点符号、字母、ASCII码
单引号引起来的是字符。
常见的字符及其对应的ASCII码
‘\0’——0 ‘\n’——10 换行符
‘ ’——32 空格 ‘0’——48
‘9’——57 ‘A’——65 ‘Z’——90
‘a’——97 ‘z’——122
‘0’和0的区别:‘0’-48=0;
‘A’和‘a’的关系:‘A’+32=‘a’。 -
32个关键字
-
存储类型:决定变量存放的存放位置
Auto:自动型 static:静态型
Extern:外部引用型 register:寄存器 -
数据类型:决定变量所占的空间大小
Char(字符型1)、int(整型4)、short(短整型2)、long(长整型4)、float(单精度浮点型4)、double(双精度浮点型8)、signed(有符号)、unsigned(无符号)。 -
控制语句
If、else、switch、case、break、default、for、while、do、goto(跳转)、continue、return。 -
构造数据类型
Struct(结构体)、union(共用体)、enum(枚举)。 -
杂项
Const 常量化、sizeof()计算数据所占的空间大小、typedf重定义、void 空、修饰指针、不能修饰变量、作为函数的返回值、作为函数的参数、volatile防止被编译器优化。 -
标识符
用来给变量、重定义、宏定义、函数、指针变量等起变量名、重定义名、函数名、指针变量名的。
标识符的定义规则: -
由字母、下划线、数字构成。
-
第一个字符不能是数字。
-
标识符不能和关键字相同。
-
见名知意
-
C语言基础2
-
常量和变量
变量:再程序运行过程中会发生变化的量。
定义格式:【存储类型】 数据类型 变量名;
存储类型:auto、stati、extern、register;
数据类型:char、short、int、long、float、double;
变量名:遵循标识符定义。
局部变量:定义在函数体内的变量,默认存储类型位auto。定义时未初始化,初始值位随机值。存放在栈区。
作用域:函数体内;
生命周期:函数调用结束,空间释放。
全局变量:定义在函数体外,定义时未初始化,初始值为0,存放在静态区的。Bss段。定义时初始化,且初始值不为0,存放在静态区的。Data段。
作用域:整个任务中;
生命周期:任务运行结束,空间释放。
注:当全局变量和局部变量名相同时,函数中用的局部变量。
常量
整型常量、浮点常量、指数常量、字符常量、字符串常量、标识常量。 -
分隔符
空格符space、制表符tab、换行符‘\n’、注释符://注释一行,/**/注释一段。 -
标点符号
逗号、分号、圆括号、花括号、冒号。
逗号运算符:只取最后一个逗号之后的运算结果,逗号之前的式子会进行运算。 -
一个任务(进程)的内存分配 32位操作系统
一个进程开辟0-4G的虚拟内存空间,0-3G属于进程私有空间,3-4G属于所有进程公共的空间(内核空间)。 -
存储类型
-
auto自动型
只能修饰局部变量,可省略不写。特点和局部变量相同。 -
static静态型
a) 2.1 static修饰变量:延长生命周期,限定作用域
b) 2.2 static 修饰局部变量:只需要初始化一次,再次调用,变量是上一次运行的结果。
c) 2.3 static修饰全局变量:定义在函数体外、跟进程共存亡、在本文件中起作用。
d) 2.4 static修饰函数:函数被限定在本文件中,只能在本文件中定义和使用。 -
extern外部引用
a) 外部引用的是全局变量。
b) 外部引用其他文件的全局变量时,需要两个文件同时编译。
c) Static修饰的变量不能外部引用。 -
register寄存器类型
register修饰变量,申请不到寄存器,将默认以auto型的变量使用。 -
数据类型:决定了变量在内存中占的空间大小
a) 整数类型 用sizeof计算所占的空间大小
类型名称 所占空间大小 值域范围
Short短整型 2字节 -215–215-1
Unsigned short 2字节 0—2^16-1
Int整型 4字节 -231—231-1
Unsigned int 4字节 0—2^32-1
Long长整型 4字节 -231—231-1
Unsigned long 4字节 0—2^32-1
b) 字符类型
Char字符类型 1字节 -27—27-1
Unsigned char 1字节 0—2^8-1
c) 浮点类型
Float单精度浮点型 4字节 保留6-7位有效数字
Double双精度浮点型 8字节 保留15-16位有效数字
注意:1.只有有符号类型,没有无符号类型
2.这里的有效数字指的是整数和小数部分的总和。
d) 逻辑类型
-
只有两个量true和false,表示逻辑真值和逻辑假值(非0为真)。
-
Bool类型用作逻辑判断,bool取值false和true,是0和1的区别;false可以代表0,但true有很多种,并非只有1。
e) 空类型
Void经常用来修饰函数返回值和指针的数据类型,没有办法直接定义出来空类型变量。 -
输入输出函数
函数三要素:功能、参数、返回值。 -
printf
功能:以指定格式向终端输出内容;
参数:format:输出内容及对应格式
返回值:输出字符的个数。 -
scanf
功能:以指定格式从终端获取数据;
参数:format:输出内容及对应格式;
返回值:成功返回正确匹配变量的个数。 -
getchar
功能:从终端获取一个字符;
参数:无;
返回值:成功获取字符的ASCII值。 -
putchar
功能:向终端输出一个字符;
参数:输出的字符(也可以是单引号引起来的字符,也可以是ASCII)
返回值:成功返回输出字符的ASCII值。 -
垃圾字符的回收
-
用空格回收;
-
用%*c回收,*抑制字符;
-
用getchar拿走一个字符。
-
C语言基础3(控制语句)
-
if条件语句 if……else
a) 基本格式1:
If(表达式1)
{
代码段1;
}else
{
代码段2;
}
执行顺序:先判断表达式1是否成立,成立执行代码段1,不成立执行else对应的代码段2。
注:0.if…else可以只有if。但是有else一定要有对应的if语句。 -
if……else没有大大括号只能匹配一句代码。
-
if和else之间不能有间隔语句。
b) 格式2:
If(表达式1)
{
If(表达式2)
{代码段1;}
Else
{代码段2:}
}
Else
{
If(表达式3)
{代码段3;}
Else
{代码段4:}
}
注:内层if语句判断执行的前提是外层if判断条件成立。
c) 格式3:
If(表达式1)
{
代码段1;
}
Else if(表达式2)
{
代码段2;
}
Else if(表达式3)
{
代码段3;
}
……
Else
{
代码段n;
}
注: -
多个表达式判断,进入main函数从上往下执行,满足其中一个条件,执行对应的代码段后,后边的条件不再判断。
-
有else if,也必须有对应的if。可以没有else语句。
-
switch开关语句
格式:
Switch(表达式)
{
Case 常量1(也可以是单引号引起来的字符):
代码块1;
Break;
Case 常量2:
代码块2:
Break;
…………
Default:
代码块n:
Break;
}
注: -
表达式计算的结果需要得到一个确切的值,值不能是小数。
-
Case后的常量不能是小数和字符串常量。
-
每个case对应的代码执行结束后需要加break语句,不加会继续执行下一个case语句,直到遇到break结束。