预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共30页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第2章Linux系统应用程序开发 读性大大降低的糟糕情况,同时不要试图去将你的代码注释写得更好,而是应该将程序代码 写得更好,不要花费大量的时间和精力去解释这些的代码。通常情况下,注释只说明代码的 功能,而不会说明其实现的原理,因为基于一个好的软件开发流程而产生出来的软件代码, 它的编制基础是详细设计和实现文档,软件代码仅仅是该文档的产出物。这也说明程序中的 注释仅仅是完成了简单说明和介绍的功能。 在实际应用过程中,应该避免把注释插到函数体内,应写在函数前面,以说明其功能。 同样对于必须加以解释的代码或变量,注释也应写在它们的前面。 ●大括号的运用 大括号(“{”和“}”)的处理在C程序书写风格中也是很重要的,与缩进格式不同, 几乎没有任何理由可以说服程序员去选择一种风格而不是选择另外一种风格,我们建议采用 统一的风格来处理大括号的排版,而不会在意函数体还是其他——开始和结束的括号都放在 下一行的第一列。 ●函数的书写格式 函数应该是短小精悍的,它的代码长度应该有限。也就是说,一个函数的最大长度和函 数的复杂程度以及缩进大小成反比。如果计划编写一个简单但长度相对较长的函数,并且已 经对不同的情况做了很多细化的工作,那么编写一个稍长的函数也是可以的。但是,假如计 划编写一个很复杂的函数,而且你已经估计到,其他人很难读懂这个函数,一般建议请重新 考虑这个函数,并将它们分割成更小的函数。 在进行函数设计时,还需要考虑的是,该函数困难要定义的局部变量的数量,理论上, 这些变量不应该超过10个,否则就有可能出错。 ●其他方面的注意事项 (1)如果参数太多,不能放在同一行,则在每行参数开头处对齐。 (2)当一个表达式需要分成多行书写时,应该在操作符之前分割。 (3)尽量不要让两个不同优先级的操作符出现在相同的对齐方式中,应该增加括号 通过代码缩进表示嵌套关系。 (4)不要在声明多个变量时跨行,每一行都应以一个新的声明开头。 (5)当一个if-else语句中嵌套了另一个if-else语句时,应该用大括号把if-else语句 括起来。 (6)尽量避免在if条件中进行赋值运算。 (7)如果没有声明,不要将BOOL值TRUE和FALSE对应与1和0进行编程,大 多数编译器会将FALSE视为0,任何非0值都是TRUE。我们建议重新定义 BOOL值并锁定0和1。 (8)预防和避免非法指针的使用。 2.3Linux系统程序应用开发实例分析 本节内容包括较为丰富,考虑工程开发的实际需要,笔者在这里精心选编了若干比较有 代表性的例子来加以介绍,包括一些常见的程序开发所必须的典型案例与技巧,包括系统文 件系统应用编程、内存管理、多进程编程、进程通讯机制、串口通讯、网络编程、GUI编程 初步等各个部分。所涵盖内容覆盖面较全,每一个实例都给出实际代码,并尽可能的给出真 实的实验结果,考虑篇幅限制,每个实验都给出简要注释和分析,详尽分析留给读者。 38 嵌入式Linux工程开发实践 2.3.1文件系统应用编程 Linux支持多种文件系统,如ext、ext2、minix、iso9660、msdos、fat、vfat、nfs等。在 这些具体文件系统的上层,Linux提供了虚拟文件系统(VFS)来统一它们的行为,虚拟文 件系统为不同的文件系统与内核的通信提供了一致的接口。 下面对涉及到的文件系统编程关键函数给以分析: z关键函数分析 1.在linux下,在对文件的任何操作之前,必须先用open()函数将文件打开,其原型为:int open(constchar*filename,intflags[,mode_tmode])其中[]中的项为可选项,filename为指 定的文件及其路径名,flags参数控制文件的打开方式,可以是O_RDONLY、O_RDWR、 O_WRONLY等等,分别表示只读、读写、只写方式等,mode参数指定正在创建的文 件的存储权限,可以是S_IWGRP、S_IRUSR、S_IWUSR等的或值。函数创建并返回一 个由filename所指定的文件的心的描述符。错误时,返回一个-1,并给errno置相应的 错误代码。 2.对文件进行读操作可以用read()函数,其原型为:ssize_tread(intfd,void*buffer,size_t size)该函数从文件描述符fd所指的文件中读取size个字节的字符,并把它放到buffer所 指向的缓冲区中。函数正常返回实际所读取的字节数。返回0表明到达了文件的尾端, 返回-1表明出错,并给errno置相应的错误代码。 3.对文件进行写操作可以用write()函数,其原型为:ssize_twrite(intfd,constvoid *buffer,size_tsize)该函数把siz