嵌入式Linux应用开发 1.系统编程 文件IO:open close write read lseek 通过文件io实现cp命令
跟着b站边学边记,加上自己的理解和代码的测试,也算是给自己做个笔记。
1.使用linuxIO和我们直接写程序的区别
我们平常直接写程序,属于在应用层写程序,通过我们的printf传入内核(在这里printf也是通过调用系统函数write进入的驱动层),通过内核的驱动,在硬件层去进行显示。当我们使用IO的时候,我们属于直接在应用层和驱动层之间通过一个write接口进入驱动层,直接通过接口从应用层进入内核层,这一过程省略printf的调用的过程。
2.使用IO去编程的好处,
首先我认为使用IO去编程,即可以实现我们在应用层编写程序的诉求,又能够减少一些没必要的麻烦。这种深入内核的编程的方式其实也是为了我们以后了解内核的一个开始,毕竟我们不能永远停留在应用层去考虑问题。内核就像一个司令官一样,统领着这些在内核的程序,实现统一进程的调配。
3.文件IO:open close
当我们在使用open的时候,如果打开的正确将返回一个标识符,打开的错误将会返回的是-1,标识符就是它的inode号,也就是内核给内核文件的标号。open函数的目的就是打开一个已有的文件或者创建一个尚未存在的文件。它拥有着三个参数,通过下面的图片简单了解。
上面O_APPEND和O_TRUNC两者的不同需要理解一下。
open函数的第三个参数是给文件设置权限,当文件存在时这个选项可以忽略掉,当创建新的文件时,这个设置的权限我们不是想设置成什么样就设置成什么样,和掩码有关系,也就是umask,我相信说到这个umask大家也就瞬间懂了。
上面图中的程序就是通过IO文件的方式去实现touch的功能。
注:在这次的程序中我们新接触了两个头文件,分别是#include”unistd.h” #include”fcntl.h”前者为Linux\UNIX内置头文件,包含了许多系统服务的函数原型,例如read函数,write函数,getpid函数等,它的作用相当于windows系统中的”windows.h”,是操作系统为用户提供的统一API接口,方便系统提供一些服务。后者也是定义了函数原型以及很多宏
4.文件IO:write
Write(int fd,void *buf,size_t count)
三个参数的含义分别为:第一个参数:向哪个文件去写,第二个参数:向这个文件写什么内容,第三个参数:向这个文件中写多少个。函数返回值:实际写进的字节数
这个函数返回值的作用就是,和第三个参数有关系,通过我们第三个参数和实际写进去的字节数的比较我们就可以知道我们是否把想写进去的内容全部写进去。通过下面这个程序创建并向文件中写一个字符串,并且看一下返回值。
5文件IO:read
Read(int fd,void *buf,size_t count)
Read和write正相反,共同点是包含着三个参数,第一个参数:去哪个文件里去读。第二个参数:开辟一个数组,通过指针的方法将内容读到那里面。第三个参数:读多少个字节,这个字节其实我们定义多大的数组就可以写多少,但是真正能够读出多少取决于我们读的这个文件中有多少。这个函数的返回值就是我们读到的数据。
通过上面我们可以看到我们并没有将返回值读出来,这其中的原因是我们在存数据的时候,是栈的过程,栈是有序的,一个地址写上数据后指向下一个数据,当我们将字符串存进去以后,位置指针指向的是最底下,当我们继续读数据的时候,位置指针继续向下移,下面是空的所以不会有任何的数据。
关于堆和栈大家可以参考以下这个连接:
https://blog.csdn.net/qq_33826977/article/details/66476289
6.lseek函数
leek(int fd,off_t offset,int whence),该函数需要用到的头文件:sys/types.h unists.h
功能:调整读写的位置指针
第一个参数:要调整文件的文件描述符,
第二个参数:偏移量,每一读写操作所需要移动的距离,单位是字节的数量,可正可负(可向前移,可向后移)。
第三个参数:当前位置的基点有三个标志
SEEK_SET:当前位置为文件的开头,新位置为偏移量的大小。
SEEK_CUR:当前位置为文件指针位置,新位置为当前位置加上偏移量。
SEEK_END:当前位置为文件的结尾,新位置为文件大小加上偏移量的大小,函数的
返回值:成功:文件当前位置,出错:-1
7.实现简单cp命令
嵌入式Linux应用开发 1.系统编程 文件IO:open close write read lseek 通过文件io实现cp命令相关推荐
- linux服务器开发二(系统编程)--线程相关
线程概念 什么是线程 LWP:Light Weight Process,轻量级的进程,本质仍是进程(在Linux环境下). 进程:独立地址空间,拥有PCB. 线程:也有PCB,但没有独立的地址空间(共 ...
- 嵌入式项目_嵌入式Linux项目分享_linux系统编程
分享一个适合入门嵌入式linux系统编程的项目,其他项目见:牛客嵌入式项目 同时附上本人编写的两个牛客高级专栏: <100道安卓常见面试题全解析> <嵌入式 面经C++软件开发 面经 ...
- 【嵌入式Linux】嵌入式Linux应用开发基础知识之输入系统应用编程
文章目录 前言 1.输入系统应用编程 1.1.输入系统框架及调试 1.1.1.框架概述 1.1.2.编写APP需要的基础知识 1.2.调试技巧 1.2.1.查看设备信息 1.2.2.使用命令查看节点数 ...
- 嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十五)输入系统应用编程
文章目录 1.输入系统应用编程 1.1 什么是输入系统 1.2 输入系统框架及调试 1.2.1 框架概述 1.2.2 编写APP需要掌握的知识 1.2.3 调试技巧 **1. 确定设备信息** **2 ...
- 【嵌入式Linux】嵌入式Linux应用开发基础知识之串口应用编程
文章目录 前言 1.ARM芯片是如何使用串口发送/接收数据的 2. TTY体系中设备节点的差别 做个小实验 3.TTY驱动程序框架 4.在STM32MP157上做串口实验的准备工作 4.1.使能设备树 ...
- 【嵌入式Linux】嵌入式Linux应用开发基础知识之文件IO
文章目录 前言 1.文件从哪来 2.文件如何访问 2.1.通用IO模型open/read/write/lseek/close 2.1.1.通用IO模型使用示例 2.1.2.open/read/writ ...
- 嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十八)串口编程
文章目录 一. 串口应用程序编程介绍 1.串口的作用 2. 本套视频特别说明 二. 硬件知识_UART硬件介绍 1. 串口的硬件介绍 2. 串口的参数 3. 串口电平 4. 串口内部结构 三. TTY ...
- 【嵌入式Linux应用开发】温湿度监控系统——多线程与温湿度的获取显示
1. 概述 在前几篇的文章中,我们已经学习了LVGL界面绘制以及paho mqtt的同步客户端和异步客户端的操作,那么本篇就会综合前面的知识,加上Linux系统的多线程以及线程间通信的知识,将LV ...
- linux 没有那个文件或目录_【新视频进度】国庆节至今更新6节quot;嵌入式Linux应用开发基础quot;...
说到做到,韦东山老师国庆没有休息,录了4节新视频,到目前快速入门-嵌入式Linux应用开发基础知识已更新6节: 01.HelloWorld背后没那么简单 02.GCC编译器的使用 03.Makefil ...
最新文章
- Python学习第四天----Linux之用户与用户组权限
- mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式)
- Storm编程入门API系列之Storm的可靠性的ACK消息确认机制
- Android 获取天气数据
- jquery ajax php中 css样式不显示,Chrome浏览器在Ajax同步调用之前不会显示Jquery的动态css Propery更改...
- mac android 证书生成工具,MAC系统下,生成安卓证书的命令
- react native windows create bundle folder
- Iphone如何应对华为鸿蒙系统,鸿蒙2.0向iOS看齐 系统解决了 芯片怎么办?
- 营收放缓、股价暴跌、高管离职,Facebook迎来至暗时刻?
- 大厂螺丝钉还是开源极客?开源新手该怎么选?
- 命令模式(3)-宏命令
- typora 语法教程
- 关于Mysql5.5在关键字方面的变化
- js src 变量_人人都能看懂的鸿蒙 “JS 小程序” 数据绑定原理
- IT成长日记(二)——打印机硒鼓重置
- 假设检验实验和拟合优度检验练习题
- axure强制签入签出
- 数字图像信号-灰度内插
- CAD梦想画图中的“对象显示顺序”
- Scala语言学习:Scala是什么?
热门文章
- python之Numpy随机抽样
- 【问题解决】ESP32报错:make: xtensa-esp32-elf-gcc: Command not found
- Qt Designer设置背景以及背景图片
- [5] Java中的static关键字
- 如何在Word中创建一个符合自己要求的样式
- 北大青鸟的班主任好当吗_【北大青鸟班主任就业前景怎么样|做北大青鸟班主任有前途吗】-看准网...
- 普通用户获取详细执行计划需要哪些权限
- 结合网站ASPCMS标签集锦
- 日乒赛-马龙爆冷止步次轮 朱雨玲陈梦率先进8强
- java剪刀石头布小游戏_JAVA实现“剪刀石头布”小游戏