Linux应用程序开发教程.docx
- 文档编号:2392672
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:63
- 大小:63.17KB
Linux应用程序开发教程.docx
《Linux应用程序开发教程.docx》由会员分享,可在线阅读,更多相关《Linux应用程序开发教程.docx(63页珍藏版)》请在冰豆网上搜索。
Linux应用程序开发教程
Linux应用程序开发教程
目录
1.C语言基础
1.1.数据类型
1.2.关键字
1.3.变量等级
1.4.特殊字符的表示方法:
1.5.格式化字符串
1.6.指针与数组
1.7.结构体
1.8.typedef--自定义类型名
1.9.函数和宏
1.10.ANSI标准头文件
2.预处理
3.使用GCC编译程序
4.使用gdb调试程序
5.Linux程序开发基础
5.1.路径
5.2.库文件
5.3.预处理
5.4.系统调用(systemcall)
6.文件处理
7.Linux环境编程
7.1.参数选项
7.2.环境变量
7.3.时间
7.4.临时文件
7.5.用户信息
7.6.日志信息
8.进程
8.1.进程状态
9.串口编程
9.1.常用函数
9.2.设置串口属性
9.3.c_iflag输入标志说明
9.4.c_oflag输出标志说明
9.5.c_cflag控制模式标志说明
9.6.c_cc[]控制字符说明
9.7.c_lflag本地模式标志说明
9.8.下面介绍一些常用串口属性的设置方法。
10.安全
10.1.内核漏洞介绍
11.数据结构(DataStructure)
11.1.基础概念
11.2.线性数据结构
12.网络编程
12.1.TCP/IP协议分析
12.2.入门示例程序
13.存储器寻址
14.设备驱动程序开发
15.字符设备驱动程序
15.1.设备号
15.2.设备号的分配和释放
15.3.重要的数据结构
15.4.读和写
16.PCI设备
17.内核初始化优化宏
18.访问内核参数的接口
19.内核初始化选项
20.内核模块编程
20.1.入门
20.2.为模块添加描述信息
20.3.内核模块处理命令介绍
21.网络子系统
21.1.sk_buff结构
21.2.sk_buff结构操作函数
21.3.net_device结构
21.4.网络设备初始化
21.5.网络设备与内核的沟通方式
21.6.网络设备操作层的初始化
21.7.内核模块加载器
21.8.虚拟设备
21.9.8139too.c源码分析
21.10.内核网络数据流
22.备忘录
ListofTables
1.1.特殊字符的表示方法
Chapter 1. C语言基础
TableofContents
1.1.数据类型
1.2.关键字
1.3.变量等级
1.4.特殊字符的表示方法:
1.5.格式化字符串
1.6.指针与数组
1.7.结构体
1.8.typedef--自定义类型名
1.9.函数和宏
1.10.ANSI标准头文件
Linux是使用C语言开发的,基于Linux平台的应用程序开发,C语言是首选的开发语言。
本章记录C语言的基本概念和基础知识。
1.1. 数据类型
整数类型(int),
各种整数数制表示法:
∙ddd,十进制表示法,d为0--9的整数,但不能以0开头。
如:
123,345。
∙0ooo,八进制表示法,以0(数字0)开头,o为0--7的整数。
如:
010(八进制)=8(十进制),014(八进制)=12(十进制)。
∙0xhhh,十六进制表示法,以0x或0X开头,h为0--9、A、B、C、D、E、F。
如:
0x10(十六进制)=16(十进制),0xA(十六进制)=10(十进制)。
∙以L或l结尾的数表示长整数(longint),编译器会以32位空间存放此数字,但GCC默认是以32位存放整数,所以此表示法在Linux下没什么作用。
1.2. 关键字
关键字是C语言本身保留使用的,不能用于变量和函数名。
autodoubleintstruct
breakelselongswitch
caseenumregistertypedef
charexternreturnunion
constfloatshortunsigned
continueforsignedvoid
defaultgotosizeofvolatile
doifstaticwhile
1.3. 变量等级
∙auto,内部变量,在函数内部声明。
只能在函数内部使用,它的生命周期从调用函数开始,到函数执行完时消失。
内部变量以堆栈存放,必须在函数执行时才会存在,这种方式称为声明。
auto可省略。
如:
autointi=0;
/*可写成inti=0;*/
内部变量的优缺点:
o内部变量只在函数内有效,能提高函数的安全。
o内部变量在函数结束时消失,不会长期占用内存空间,能提高内存的利用率。
o内部变量的缺点是生命周期短,函数运行结束后不能保留。
∙staticauto,内部静态变量,在函数内部定义,auto也可省略。
内部静态变量以固定地址存放,编译时就已分配置内在空间,这种方式称为定义。
由于有固定地址,函静态变量不会随函数的结束而消失。
static变量会一直保存在内存空间中,当函数再次执行时,上次保留的使用静态变量可以继续使用。
如:
staticinti=0;
∙extern,外部变量,是在函数外定义的变量,可被多个函数存取。
在外部变量定义覆盖范围之内的函数内可以自由使用外部变量。
不在外部变量定义覆盖范围之内的函数要使用外部变量就要先使用extern关健字来声明外部变量。
inti;/*外部变量定义,在main函数外*/
intmain(void)
{
i=1;/*main()函数位于外部变量i定义的下面,不用声明可直接使用*/
printf("%d\n",i);
}
不在外部变量定义覆盖范围之内的函数要使用外部变量就要先使用extern关健字来声明外部变量。
intmain(void)
{
externinti;/*外部变量i在main()函数之后定义,需用extern关键字声明后才能使用*/
i=1;
printf("%d\n",i);
}
inti;
...
在另外的程序文件中我们也可以通过扩展声明使用其它程序文件中的外部变量。
程序1hello.c
#include
intmain(void)
{
externinti;//扩展声明外部变量
i=333;
printf("%d\n",i);
externdes(void);//扩展声明外部函数
des();
}
inti;//外部变量定义
程序2hello1.c
#include
externinti;//扩展声明其它程序文件中的外部变量
voiddes()
{
i++;
printf("%d\n",i);
}
编译
debian:
~/c#gcchello.chello1.c
debian:
~/c#./a.out
333
334
外部变量有效范围总结:
o由外部变量定义的位置开始,至文件结尾。
o不在有效范围内的函数,也可通过extern扩展声明使用定义的外部变量,且可在多个函数中使用。
注意:
在各函数中使用的外部变量是一样的,对该变量的修改会影响到其它函数内的同一变量。
o可用extern扩展声明使用另外一个程序文件中的外部变量。
外部变量的优点是生命周期长,可在函数间共享数据和传输数据。
缺点是变量安全性较低,但可通过合理设置外部变量的有效范围提高安全性。
∙staticextern,外部静态变量,在函数外部定义,只供单一程序文件使用,即使其它程序文件定义了同样名称的变量,编译器也把它当成另外一个变量处理。
外部静态变量能有效隔离变量在一个程序文件中。
staticinti;
∙register,register变量是以寄存器(register)来存放变量,而不是一般内存。
只有内部变量才能使用register类型变量。
使用这种变量能加快变量的处理速度。
但缺点是要占用CPU寄存器。
如:
registerinti;
registerintj;
变量等级的概念也同样适用于函数。
若想调用不在有效范围内的函数,则要用extern扩展声明函数的有效范围。
内部变量是以堆栈方式存放的,必须在函数执行时才会存在,所以称为声明(Declaration)。
其它如staticauto、extern和staticextern等级的变量,都是以固定的地址来存放的,而不是以堆栈方式存放的,在程序编译时就已分配了空间,所以称之为定义(Definition)。
1.4. 特殊字符的表示方法:
Table 1.1. 特殊字符的表示方法
符号
ASCII字符(十六进制)
句柄符号
作用
\a
07
BEL
响铃
\b
08
BS
回格
\f
0C
FF
换页
\n
0A
LF
换行
\r
0D
CR
回车键
\t
09
HT
[tab]键
\v
0B
VT
空行
\0
00
NUL
空字符
\\
5C
\
反斜杠
\'
2C
'
单引号
\"
22
"
双引号
\?
3F
?
问号
1.5. 格式化字符串
∙%c,表示字符变量。
∙%s,表示字符串变量。
∙%f,表示浮点数变量。
∙%d,表示整数变量。
∙%x,表示十六进制变量。
∙%o,表示八进制变量。
1.6. 指针与数组
∙C语言中专门用来存放内存地址的变量叫指针(pointer)变量,简称指针。
∙&运算符用来取得变量地址,
∙"*"运算符用来取得指针变量的值。
∙数组名就是地址变量,指向内存中存放第一个数组元素的地址。
数组元素编号从0开始,如a[0]表示数组a的第一个元素。
数组是内存中的连续区间,可根据声明类型存放多种数值类型。
如:
inta[10];声明一个有10个int元素的数组
charb[20];声明一个有20个char元素的数组
指针示例:
int*p;/*p是一个指针,p的内容是内存的地址,在这个地址中将存放一个整数。
数组名和指针都是用来存放内存地址的,不过数组名具有固定长度,不可变。
而指针与一般变量一样,其值是可变的。
1.7. 结构体
结构体是用户定义的由基本数据类型组成的复合式数据类型。
数组也是复合式数据类型,但二者是不同的,数组是相同类型数据的集合,而结构体是不同类型数据的集合。
如我们可以把一个人的姓名、性别,年龄组成一个单一结构体。
这样在程序处理时就把它当成一个独立对象进行处理。
结构体声明方法有两种,一种是分离式声明,一种是结合式声明。
分离式声明是先把声明结构体,在程序中再声明结构体变量。
结合式声明是把结构体声明和变量声明同时完成。
分离式声明示例
structperson{
charname;
charsex;
intage;
};
main(void){
structpersonworker;
...
}
结合式声明示例
structperson{
charname;
charsex;
intage;
}worker;
每个结构体可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 应用程序 开发 教程