首页 » 软件开发 » 一文搞懂Linux系统开发(文件数据目录函数系统)

一文搞懂Linux系统开发(文件数据目录函数系统)

落叶飘零 2024-07-24 09:44:58 0

扫一扫用手机浏览

文章目录 [+]

Linux系统开发会用到什么?

C语言基础

shell脚本

一文搞懂Linux系统开发(文件数据目录函数系统) 软件开发
(图片来自网络侵删)

慢慢学会使用Makefile

常规Linux系统编程知识都有什么?哪些常用?哪些不常用?

常规Linux编程知识

文件IO

文件与目录操作

标准IO库

进程控制

线程编程

高级IO

进程间通信

数据库

串口编程

网络编程

结束语

Linux系统开发会用到什么?

C语言基础

Linux系统内核是C语言编写的,所以,Linux系统开发可能会和很多系统API打交道,需要掌握C语言基础,C语言是Linux最基础的开发语言,当然也可以用C++。
一般做与系统交互的模块时,用C语言多一些,做上层业务应用时,为了开发效率,会使用C++来开发,毕竟C++是面向对象的开发语言,适合大型项目的开发,方便模块化,代码复用率高。

shell脚本

shell脚本,也就是使用Linux系统下的一系列命令,有机组合在一起,而完成预期的功能。
Linux设计思想是“小即是美”,这一思想是shell脚本编程的完美体现。
每个命令只完成一种功能,不同的命令组合在一起,却可以实现复杂的功能。
做Linux下开发,免不了要与脚本打交道(比如测试、分析数据等)。

慢慢学会使用Makefile

Makefile是Linux程序开发时必不可少的编译管理脚本,这个里面东西也很多,不过刚开始可以简单看看,够用就行,随着项目的越做越大,代码文件与目录越来越复杂,这时候的Makefile可能就会复杂一些,牵扯到不同目录的Makefile的相互调用或者协调。

比如嵌入式系统中,一般不止一个应用程序,可能会有多个程序,在整体编译时,会包括如下内容:

各个应用程序模块的编译(需要判断是否编译成功,出现编译失败的情况停下来,抛出错误信息)

应用程序打包(做成压缩包或者分区镜像)

默认配置文件打包

uboot、内核、文件系统、应用程序整体打包成一个镜像文件,大小对应flash分区的大小(大小不足需要填充空数据,保证与分区对应)。

自动版本管理,在编译完成,打包完成后,可以通过脚本来自动根据时间生成版本号。

这些东西做起来其实挺复杂的,需要Makefile与shell脚本搭配完成。

常规Linux系统编程知识都有什么?哪些常用?哪些不常用?

常规Linux编程知识

文件IO

比较常用

Linux系统下,所有的资源都是以文件的形式访问的,设备被抽象为设备文件,放于/dev目录下。

基本的访问函数:

函数名简介一般怎么用

open打开设备文件访问设备文件,首先要先打开设备

close关闭设备文件文件访问结束后,需要调用该接口,如果不关闭,会造fb耗尽

read读取数据读取数据,可以是文本文件内容,也可以是摄像头数据等

write写入数据向设备写数据,比如串口通信时,可以用write发送数据

ioctlIO操作函数该函数功能比较多,被称作杂物箱~,可以读、写数据,做驱动的同学应该很了解

fcntl属性设置函数对已经打开的设备,设置属性,比如可以设置串口读数据的阻塞和非阻塞属性

lseek改变偏移量一般用于对已打开的文件读写位置的偏移量修改

文件与目录操作

常用

系统编程少不了文件与目录的访问,比如你要读取某个目录下的所有文件名字,或者修改文件名、修改目录,移动文件等等。

函数名简介一般怎么用

stat、 fstat 、lstat获取文件状态可以获取到文件的创建、访问时间,文件大小等

access检测文件属性常用于判断文件是否存在

chmod修改文件权限一般涉及到文件访问权限修改时,会用到,比如增加可执行权限

mkdir创建目录一般在程序里判断到需要用到的目录不存在时,用此函数创建

rmdir删除目录需要删除目录时使用,一般很少用到

opendir打开目录在读取目录信息之前,需要先打开目录(类中与文件访问)

readdir读取目录内容在检索文件时,会用到,读取目录下文件列表

closedir关闭目录在读取完成后,记得关闭目录

sync同步数据到磁盘这个函数一般在修改文件,写入数据后调用,让系统把数据同步到磁盘

标准IO库

比较常用

所谓标准IO库,其实是C语言里的文件IO,另外这里面的IO与前面提到的“文件IO”在文件的读写上有个区别,标准IO是有缓存的,而Linux系统的文件IO函数是无缓存的。

主要是文件操作函数:

函数名简介一般怎么用

fopen打开文件放文件文件前先调用fopen获取文件句柄

fclose关闭文件文件访问结束后,记得关闭文件,否则造成内存泄露

fread读取文件读取文件数据

fseek修改文件读写位置用于修改文件读写的位置偏移量

进程控制

一般

如果你不使用多进程编程的话,这一项可能就用的不多,我的代码里用的也不是太多。

这个知识点主要是进程的创建、子进程管理、进程退出资源释放等等。

线程编程

比较常用

上了系统,一般跑的任务就会比较多,线程是比较常用的,一般可以分为两种,一种是长时间运行的任务,一种是执行完任务自行退出。
现在C++11已经支持了线程,使用起来非常方便。
之前没有C++11时,为了方便使用,都是对pthrea_簇函数进行了二次封装。

高级IO

常用

可能你会比较奇怪,为什么这么多“IO”相关的东西:文件IO、标准文件IO、高级IO!

是的,这里的IO比较多,前两个“IO”还有点相似,这个高级IO和前面两个有点不太一样。

高级IO里主要是讲的IO操作的方式:阻塞、非阻塞控制,最主要的是通过select和poll实现IO多路复用,这样可以实现程序的异步执行。
现在用的比较多的Nginx,就是使用的epoll模型,实现的高并发。

进程间通信

非常常用

一般在linux系统下面,既然是系统,就不止一个应用程序在运行,那多个应用程序,就会需要数据交互,那么,就用到了进程间通信,进程间通信有许多开源的工具(比如DBUS),这里简单介绍一下系统里提供的通信方式:

名称简介

管道一般用于父子进程间通信,有名管道可以跨程序

消息队列消息队列可以分类型,适用于数据量小的,简单通信

信号量PV操作,用于同步,可以与共享内存搭配用,写完数据,告诉另一个线程可以读取了

共享内存适用于大数据量的传输

socketsocke不仅是网络通信的接口,也可以是本地进程间通信(UNIX socke),这种方式很常用

数据库

常用

如果是存储配置参数,我不太推荐用数据库,用json就挺好。
数据一般用于存储比较规则的数据,这样方便数据的管理。
在嵌入式系统,用的比较多的是sqlite数据库。

串口编程

比较常用

在Linux下,特别是做嵌入式系统,这个可能是少不了的,比较常用。
其实串口编程也很简单,可能200行代码就可以把串口通信建立起来了。
应用层的数据通信,就是使用write、和read函数操作,但是如果想做的比较好一些,就需要花点时间去做个软件框架,比如利用前面提到的select实现异步操作(后面文章会介绍实现方式以及串口的封装)。

网络编程

超级常用

相信现在的嵌入式设备基本上都需要网络通信功能,所以,网络编程自然是非常常用的。
特备是现在物联网的发展,万物互联。
Linux下的网络编程,有一系列的API函数,挺多的,参数配置也比较多,刚开始会让人很头疼,不知道哪个参数设置个什么值合适(我们都是慢慢试错试出来的)。
这个也不用担心,我后面会给大家分享出来我用C++封装好的网络通信库,包括TCP、UPD、UDP组播、域套接字(本地)等的封装。

结束语

————————————————

版权声明:本文为CSDN博主「fensnote」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/wuquan_1230/article/details/104808817

标签:

相关文章

语言中的借用,文化交融的桥梁

自古以来,人类社会的交流与发展离不开语言的传播。在漫长的历史长河中,各民族、各地区之间的文化相互碰撞、交融,产生了许多独特的语言现...

软件开发 2025-01-01 阅读1 评论0

机顶盒协议,守护数字生活的新卫士

随着科技的飞速发展,数字家庭逐渐走进千家万户。在这个时代,机顶盒成为了连接我们与丰富多彩的数字世界的重要桥梁。而机顶盒协议,作为保...

软件开发 2025-01-01 阅读1 评论0

语言基础在现代社会的重要性及方法步骤

语言是人类沟通的桥梁,是社会发展的基础。语言基础作为语言学习的基石,对于个人、社会乃至国家的发展具有重要意义。本文将从语言基础在现...

软件开发 2025-01-01 阅读2 评论0

粤语电影,传承文化,点亮时代之光

粤语电影,作为中国电影产业的一朵奇葩,以其独特的地域特色、丰富的文化内涵和鲜明的艺术风格,赢得了广大观众的喜爱。本文将从粤语电影的...

软件开发 2025-01-01 阅读5 评论0

苹果游戏语言,塑造未来娱乐体验的基石

随着科技的飞速发展,游戏产业逐渐成为全球娱乐市场的重要支柱。在我国,游戏产业更是蓬勃发展,吸引了无数玩家和投资者的目光。而在这其中...

软件开发 2025-01-01 阅读1 评论0