一周时间转瞬即逝,在这一周的学习中,我深入探索了Linux C语言的高级特性和用法。以下是我对所学知识的总结:
一,认识嵌入式操作系统
学些Linux C语言时我首先了解嵌入式操作系统分类,应用领域,UNIX的起源,使用及认识shell编程,理解之后对我后续学习帮助很多。
1.什么是操作系统
操作系统是管理和控制计算机硬件与软件资源的计算机程序,它是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。
2.操作系统分类
(1).批处理操作系统
(2).分时操作系统
(3).实时操作系统
(4).嵌入式操作系统
(5).个人计算机操作系统
(6).网络操作系统
(7).分布式操作系统
3.嵌入式系统应用领域
(1).工业控制
(2).智能家具领域
(3).安防领域
(4).汽车电子领域
(5).交通物流领域
(6).健康医疗领域等
二,Linux 操作系统使用
学习Linux时,认识shell编程,各种命令,常用的特殊符号,环境变量,掌握这些命令来编辑,编译,执行所写的代码。
1.shell命令格式
命令名称 【选项】 【参数】
<1>.一条命令三要素之间必须要有空格隔开
<2>.若多个命令在一行书写,用分号(;)将各命令隔开
<3>.如果一条命令不能在一行写完,在行尾使用反斜杠()标明该条命令未结束
2.系统管理命令
ps:显示当前系统中由该用户运行的进程列表
ps-ef:查看所有进程及其PID,系统时间,命令详细目录,执行者
ps-w:加宽以显示较多信息
ps aux:除可显示-ef所有内容之外,还可显示CPU及内存占用率,进程状态
top:动态显示系统中运行的程序 (一般为每隔几秒刷新一次)
pstree:以树的形式显示进程
kill:输出特定的信号个PID
clear:清除屏幕信息
shutdown-h now:现在立即关机
shutdown -h +30 :半小时后关机
reboot :重启
shutdown -r now:重启
3.磁盘相关命令
free:查看当前系统内存的使用情况
df:查看文件的磁盘占用情况
du:统计目录所占磁盘大小
fdisk 查看磁盘分区情况及对磁盘进行分区管理
fdisk -l 显示文件系统的分区情况
<1>.使用fdisk必须拥有root权限
<2>.IDE磁盘hda,hdb......,SCSI硬盘是对应sda,sdb......hda1,第一个硬盘分区
fdisk 查看磁盘分区情况及对磁盘进行分区管理
fdisk -l 显示文件系统的分区情况
<1>.使用fdisk必须拥有root权限
<2>.IDE磁盘hda,hdb......,SCSI硬盘是对应sda,sdb......hda1,第一个硬盘分区
4.文件,目录相关命令
cd mkdir cat cp mv rm vim
chmod:改变文件的访问权限
chown:修改文件的所有者与组别
chgre:改变文件的所有权
cat:查看比较短的文档
more:查看较长的文档
less是more的增强版
grep:搜索特定字符,并输出含有行
| 关联
5.常用特殊符号
<1>.重定向符号 > 文件不存在,则新建,文件存在,覆盖原文件中的内容
<2>.追加重定向符号 >> 文件不存在则新建,文件存在,则追加在文件的末尾
<3>.反引号 ``
<4>.通配符
6.压缩打包命令
gzip:压缩
bzip2
tar:对文件目录进行打包和解包
diff:文件比较命令
5.Linux环境变量
env:显示所有的环境变量
PATH:临时修改
ifconfig:查看ip地址
三,Linux用户管理
学习了用户的属性,相关配置,shell编程的运用,各种变量程序和语句的,掌握使用这些语句来编写程序来实现
1.管理命令
创建用户:adduser
修改密码:passwd
增加组:groupadd
修改用户属性:usermod
删除用户:deluser
删除组:groupdl
2.shell编程
用户自定义变量
预定义变量
$#包含命令参数的个数
$@包含所有命令行参数
$*包含所有命令行参数
$$包含一个正在执行的进程号
$?包含前一个命令退出的状态
3.shell程序和语句
#!/bin/bash
expr:算术运算命令
test:测试字符串与整数
-eq 测试是否相等
-ne 测试是否不相等
-gt 测试是否大于
-ge 测试是否大于等于
-lt 测试是否小于
-le 测试是否小于等于
文件属性
-d 测试是否为一个目录
-f 测试是否为普通文件
-l 测试是否为符号链接
-r 测试是否存在可读
-w 测试是否存在可写
-x 测试是否存在可执行
3.结构性语句
1.顺序
read 输入
echo 输出
2.选择
单分支
if [ 条件为真 ]
then
语句
fi
双分支
if [条件为真]
then
语句1
else
语句2
fi
多分支
if [条件1为真]
then
语句1
elif [条件2为真]
then
语句2
elif [条件3为真]
then
语句3
.....
else
语句n+1
fi
case 字符串变量 in
# 1|3|5|7
模式1|模式11|模式12)
语句1
;; #---->break
模式2)
语句2
;;
模式3)
语句3
;;
....
3.循环
1.for
<1>.带列表的for
模式n)
语句n
;;
*)
语句n+1
;;
esac
while [条件为真]
do
语句
done
四,函数与结构体
学习如何定义函数,创建结构体,操作结构体的指针,在堆区分配空间和释放空间,堆区与结构体空间关联起来
1.函数的定义
函数名() function 函数名()
{ {
函数体 函数体
} }
2.函数调用
变量名=·函数名 参数一 参数二
3.结构体
如何创建结构体数据类型
//定义结构体语句
struct 结构体名字
{
属性1;
属性2;
属性3;
.......
};
·创建结构体变量
#include <stdio.h>
//定义一个学生的结构体数据类型
struct student
{
char name[20];
int height;
float scores[3];
};
//定义一个结构体数据类型,该名字叫struct student
int main(void)
{
//类型名 变量名;
//定义一个结构体变量并进行初始化
struct student s1={"lisi",183,{90,89,78}};
return 0;
}
如何访问变量的值
如何操作结构体指针
//定义一个指向int的指针
int * pi=NULL; //sizeof(pi)=8 pi+1 sizeof(int)
//定义一个指向结构体(struct student)的指针
struct student * ps=NULL; //sizeof(ps)=8 ps+1 (struct student)
4.内存管理
分配空间
#include <stdlib.h>
//参数:你要分配空间的大小
//返回值:void * void (表示空) void * (任何数据类型的地址)
//分配成功返回空间的首地址,失败则返回NULL
//malloc分配的空间未进行清空
void *malloc(size_t size);
释放空间
#include <stdlib.h>
//参数1:释放空间的首地址
void free(void *ptr);
五.自定义头文件与函数指针
学习Linux其中自定义,分阶段执行过程,make工程管理器和变量,定义函数指针,储存类型等各类结构体
1.自定义头文件要求
引入头文件
宏定义
结构体类型的定义
枚举类型的定义
函数声明
2.如何引入自定义头文件
#include "stu"
3.""与<>的区别
"":编译器从用户的工作路径开始搜索文件
<>:编译器从标准库路径开始搜索文件
4.条件编译
作用:避开头文件被重复引入
5.make工程管理器
make工作原理:默认在当前路径下查找一个makefile文件
6.makefile
自动变量
$@:目标文件
$^:所有的依赖文件
$<:第一个依赖文件
预定义变量
CC:c编译器的名称,默认为cc
CFLAGS:c编译器选成,无默认值
RM:文件删除程序的名称,默认值为rm -f
7.函数指针
如何定义函数指针
int (*pfun)(int,int)
函数参数也可以是函数指针
函数指针也可以取别名(typeddef)
typedef int (*PFUN)(int,int)
8.存储类型
register 寄存器
exterrn 外部的
局部变量:定义在函数体内部的变量
全局变量:定义在函数体外不的变量
extern:修饰全局变量
external:修饰函数
static:静态的(隐藏)
9.共用体
struct student
{
char name[20];
int height;
};
10.大小端
小端序:低字节存在低地址处
大端序:低字节存在高地址处
11.枚举
//1.定义一个枚举的数据类型
enum timeDate
{
MONDAY=1,TUESDAY,WEDSDAY,THURSDAY,FRIDAY //默认是从开始的整数
};
12.位域
typedef struct mydate
{
unsigned int year:11; //int的11位:
unsigned int month:4;
unsigned int day:5;
}Date; //缺点:不能通过scanf()输入
总的来说
通过这一周的学习,我对Linux C高级语言的掌握程度有了显著提高。我在其中遇到了一些挑战,但通过不断练习和探索,我逐渐克服了困难,并加深了对这门语言的理解。我将继续努力学习,巩固所学知识,并致力于提升我的编程技能。