Linux C学习总结

光阴似箭,日月如梭,转眼已经又过去半个月了,来华清学习已经快一个月了,知识储备在不断地增长,学到的东西也也越来越多,良好的学习氛围让我们更加的勤奋,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

  1. 启动gdb调试器

gdb error

  1. 设置断点

b main(从main函数开始调试)

b 行号

  1. 运行(r)
  2. 其它参数

n:下一步(不进入子函数)

s:下一步(进入子函数,包括库函数)

p a:打印a的值

c:跳出循环 or 函数

quit:退出

Makefile工程管理

目标文件1:依赖文件1

(Tab键)依赖文件1是如何生成目标文件1

目标文件2:依赖文件2

(Tab键)依赖文件2是如何生成目标文件2

注意:

  1. 一个Makefile中可以有多个目标文件
  2. 如果两个目标之间没有依赖,系统默认只执行第一个目标

没有依赖关系:

有依赖关系:

  1. 执行make命令时,需要指定目标是什么,如果没有指定系统默认执行第一个目标文件

  1. 目标文件可以没有依赖文件

枚举;

enom

赋值则从赋值开始依次增加,不赋值则从零开始增加;

共用体:

1.所有成员的首地址都是一致的

2.所占的内存空间的大小由成员中最大的那个决定

大多数时间用来判断大端序和小端序。

Shell:

Shell脚本应该是这一部分最重要的知识点之一

shell命令:用户向内核发出的控制请求,与之交互的文本流

Shell是一个命令行解释器,将用户命令解析为操作系统所能理解的指令,实现用户与操作系统的交互。

shell脚本:一堆命令的集合

头文件 #!/bin/bash

内容

相比起c语言shell更加容易上手操作,shell的本质是一堆命令的集合 shell里的语句基本都是命令语

LinuxOS下有7中文件类型:

  1. 普通文件  -
  2. 目录文件  d
  3. 字符设备文件 c
  4. 块设备文件 b
  5. 链接文件 l
  6. 管道文件 p
  7. 套接字文件(socket) s

Shell脚本中的一些命令

chomd;改变文件的访问权

chown:作用:修改文件所有者和组别

注意:使用时必须使用root权限

chgrp 作用:修改用户所在组

注意:必须使用root权限

grep:作用:在指定的文件中搜索特定的内容

alias:作用:起别名(一次性的),想要永久有效的话添加到.bashrc(家目录下)中

wc  :-l:统计这个文件有多少行

-c:统计这个文件有多少个字符

cat 文件名;//只适合查看比较短的文档

more 文件名;//适合查看比较长的文档,按回车向下翻一行,按空格向下翻一页

less 文件名;//more的加强版,适合看比较长的文档,按回车向下翻一行,空格向下翻一页,支持上下箭头

压缩工具:gzip、bzip2

注意:以上只能压缩文件,不能压缩目录

压缩:

  1. gzip 文件名,压缩的后缀为 .gz
  2. bzip2 文件名,压缩的后缀为.bz2

解压:

方式1:

  1. gunzip 压缩后的文件名
  2. 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高手。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值