光阴似箭,日月如梭,转眼已经又过去半个月了,来华清学习已经快一个月了,知识储备在不断地增长,学到的东西也也越来越多,良好的学习氛围让我们更加的勤奋,c高级的知识更是让我眼前一亮,更深刻的学习到了Linux系统的管理,shell脚本的编写,以及对Linux系统的应用,让c语言这门编程语言变得更加丰富多彩,让一串串简单的代码不再只是代码,它将变成丰富多彩的图案及语言。当你学习了c语言之后,会发现他非常的有趣,具有良好的可移植性,多用户,多任务等特点。
下面是我总结的的这半个月内学习到的关于c高级(Linux)的一些知识:
首先就是结构体:
struct 结构体名
{
属性1;
属性2;
属性n;
};
//描述一个人的姓名,年龄
struct people
{
char name[20];//姓名
int age;//年龄
};
定义了一个结构体,结构体的数据类型为struct people
数组是一堆元素的集合,结构体也就是一堆事务属性的集合。
typedef可给结构体起别名,
typedef struct people
gcc的编译流程,gcc是linux里面所学到的比较实用的一个编译器
下面是gcc编译流程
预处理(处理以#开头的文件):gcc -E stu.c -o stu.i
编译(生成汇编语言):gcc -S stu.i -o stu.s
汇编(将汇编语言转成机器代码):gcc -c stu.s -o stu.o
链接(将所有的机器代码汇集生成一个可执行文件):gcc stu.o -o stu
gdb调试器
编辑器:vim、gedit
编译器:gcc
调试器:gdb
(1)编译的时候添加-g参数
gcc -g error.c -o error
- 启动gdb调试器
gdb error
- 设置断点
b main(从main函数开始调试)
b 行号
- 运行(r)
- 其它参数
n:下一步(不进入子函数)
s:下一步(进入子函数,包括库函数)
p a:打印a的值
c:跳出循环 or 函数
quit:退出
Makefile工程管理
目标文件1:依赖文件1
(Tab键)依赖文件1是如何生成目标文件1
目标文件2:依赖文件2
(Tab键)依赖文件2是如何生成目标文件2
注意:
- 一个Makefile中可以有多个目标文件
- 如果两个目标之间没有依赖,系统默认只执行第一个目标
没有依赖关系:
有依赖关系:
- 执行make命令时,需要指定目标是什么,如果没有指定系统默认执行第一个目标文件
- 目标文件可以没有依赖文件
枚举;
enom
赋值则从赋值开始依次增加,不赋值则从零开始增加;
共用体:
1.所有成员的首地址都是一致的
2.所占的内存空间的大小由成员中最大的那个决定
大多数时间用来判断大端序和小端序。
Shell:
Shell脚本应该是这一部分最重要的知识点之一
shell命令:用户向内核发出的控制请求,与之交互的文本流
Shell是一个命令行解释器,将用户命令解析为操作系统所能理解的指令,实现用户与操作系统的交互。
shell脚本:一堆命令的集合
头文件 #!/bin/bash
内容
相比起c语言shell更加容易上手操作,shell的本质是一堆命令的集合 shell里的语句基本都是命令语
LinuxOS下有7中文件类型:
- 普通文件 -
- 目录文件 d
- 字符设备文件 c
- 块设备文件 b
- 链接文件 l
- 管道文件 p
- 套接字文件(socket) s
Shell脚本中的一些命令
chomd;改变文件的访问权
chown:作用:修改文件所有者和组别
注意:使用时必须使用root权限
chgrp 作用:修改用户所在组
注意:必须使用root权限
grep:作用:在指定的文件中搜索特定的内容
alias:作用:起别名(一次性的),想要永久有效的话添加到.bashrc(家目录下)中
wc :-l:统计这个文件有多少行
-c:统计这个文件有多少个字符
cat 文件名;//只适合查看比较短的文档
more 文件名;//适合查看比较长的文档,按回车向下翻一行,按空格向下翻一页
less 文件名;//more的加强版,适合看比较长的文档,按回车向下翻一行,空格向下翻一页,支持上下箭头
压缩工具:gzip、bzip2
注意:以上只能压缩文件,不能压缩目录
压缩:
- gzip 文件名,压缩的后缀为 .gz
- bzip2 文件名,压缩的后缀为.bz2
解压:
方式1:
- gunzip 压缩后的文件名
- bunzip2 压缩后的文件名
tar:作用:对目录进行打包或者解包,后缀为.tar
-c:打包
-x:解包
-v:显示详细的处理过程
-f:指定包文件名(该参数必须放在最后一个)
-z:调用gzip来压缩打包文件,与-x连用时调用gunzip完成解压缩
-j:调用bzip2来压缩打包文件,与-x连用时调用bunzip2完成解压缩
测试字符串
s1 = s2 测试两个字符串的内容是否完全一致
s1 != s2 测试两个字符串的内容是否有差异
-z s1 测试s1 字符串的长度是否为0
-n s1 测试s1 字符串的长度是否不为0
测试整数:
a -eq b 测试a与b是否相等
a -ne b 测试a与b是否不相等
a -gt b 测试a是否大于b
a -ge b 测试a是否大于等于b
a -lt b 测试a是否小于b
a -le b 测试a是否小于等于b
测试文件属性:
-d name 测试name是否一个目录
-e name 测试name是否存在
-f name 测试name是否普通文件
-L name 测试name是否为链接文件
-r name 测试name文件是否存在且可读
-w name 测试name文件是否存在且可写
-x name 测试name 文件是否存在且为可执行
-s name 测试name 文件是否存在且其长度不为0
f1 -nt f2 测试文件f1 是否比文件f2 更新
f1 -ot f2 测试文件f1 是否比文件f2 更旧
Shell中的控制语句
选择语句:
if [表达式1]
then
语句1
elif [表达式2]
then
语句2
...
elif [ 表达式n ]
then
语句n
else
语句n+1
fi
case:
case 字符串变量 in
模式1)
命令表1
;; //类似与break,但是;;不能省略,最后一个可以省略
模式2 | 模式3)
命令表2
;;
.........
模式n)
命令表n
;;
*)//类似于c中的default
命令表n+1
;;
esac
循环语句:
for 变量 in 单词表
do
语句
done
while [表达式]
do
语句
done
函数:
方式1:
函数名()
{
}
方式2:
function 函数名()
{
}
以上则是我半个多月来学习到的内容总结,如果命令不对可切换大小写。
c语言是一门可操作性很强的语言,平时学习中也需要多学多练多敲代码,不断重复重复再重复。希望我的总结对大家能有帮助,后续我还会再继续更新学习进度和内容,希望大家都能成为知识大咖,IT高手。