嵌入式Linux入门11:应用层编程应用和分类

本文针对Linux系统环境应用层的编程应用做一个概述。

有的人把Linux底层和应用层严格区分对待,在一定程度上是没有错误的。但很多时候需要进行交叉学习。比如,编写了底层驱动程序,如何验证这个驱动能正常工作呢?这时就需要动手写应用层程序了。这个例子不是十分严谨,实际工作中,依然是要有所侧重的。

本文不会详细介绍Linux应用层的编译。仅是对此进行一个概述,并提供指导方法。真实要掌握,还是需要自己花时间动手编写代码,而不能只靠看几篇文章,读几本书。

首先要明确编码环境,很多书籍、帖子,都在介绍如何将emacs、vim打造成一个强大的编辑器,许多年前,笔者亦好此道,然而,除了花时间在搞各种配置之外,好像对编程本身没起多大作用。若干年后,笔者的编程环境如下:

虚拟机Linux+samba共享,Windows映射磁盘,使用notepad++(简单程序)、vs code、source insight等编辑器来编写代码。生产服务器中,如果简单的代码(或脚本),则使用vim来修改,如果复杂的,则在本地修改调试,再通过git上传仓库,在服务器更新代码。

值得一提的是,每个人的经验、背景知识不同,所以别人的经验始终是别人的经验,只能做参考,然后以此为依据找到适合自己的方法。

一、应用层编程分类

1、文件IO操作。
2、进程控制、进程间通信、多线程操作
3、信号处理
4、网络编程
5、串口编程

上面的分类,不仅是Linux(或嵌入式Linux)中会遇到,Windows系统也有,而且各不相同,比如网络编程,虽然都是socket,但因为两大系统实现方式不同,使用上亦有不同。

另外,还有一类是标准库,如printf/scanf系函数、内存操作(mem系函数)、字符串操作(str系函数)、数学库,等等,这些函数几乎在所有系统上通用。

二、指导方法

1、linux自带手册:man
对于linux命令或函数不熟悉的,可以在终端输入man xxx来查看帮助文档。比如查看open函数,输入man 2 open。

2、c/c++在线参考:
这个网站上包括了C、C++标准接口函数的说明、示例。对于STL也有详实说明。总体上介绍比较全面,建议收藏备用。

3、积累代码库
最好将一些常用的功能封装为库函数的形式。比如串口,网络,写读文件,等等。注意,库函数与测试使用的函数目的不同,写法也有不同,库函数中一般不调用打印函数、退出函数,等等,另外建议减少对参数的判断,以减轻代码体积。

实际上,在学习、工作中使用到的功能,都建议封装成库函数,以笔者为例,有YUV转换、BMP/JPEG读写、XML读写,等等代码库。积少成多,终有一天,这些库函数会派上用场。

推荐书籍:
入门篇:
《Linux C 编程一站式学习》
《Linux C从入门到精通》
《Linux C编程从初学到精通》
《Linux C编程实战》
《嵌入式linux应用开发完全手册》 (该书对嵌入式Linux开发整体都有讲述,一书以看窥全貌,入门适用)

linux网络编程篇:
《UNIX网络编程》
《UNIX环境高级编程》

C/C++提高篇:
《C陷阱与缺陷》
《C专家编程》
《C和指》
《C++沉思录》
《C/C++深层探索》
《Effective C++中文版》
《提高c++性能的编程技术》
《0 bug:C/C++商用工程之道》 (这本书网络有一定争论,笔者认为有部分的确有可取之处,请辩证看待)

李迟 2017.9.04 夜