嵌入式Linux应用开发——文件IO(所学课程来源百问网)

目录

1.文件IO的分类

2.函数原型

2.1系统调用接口

1.open函数

2.read函数

3.write函数

4.close函数

2.2文件IO综合实验

2.3文件IO 系统调用内部机制

2.4dup函数

补充:


一、文件IO

1.文件IO的分类

文件IO可分为,系统IO和标准IO两种,标准IO是在系统IO的基础上引入了一个用户buff,加入这个buff的作用是让程序不用频繁的访问内核。

2.函数原型

2.1系统调用接口

注意:使用read()函数读取文件,假如你第一次使用这个函数读取了三个字节,他的位置会更新,也就是你下次在进行读取的时候,不是又从头开始读,而是从上一次的位置开始读。这一现象在read函数的返回值中也可以体现,如果你想读100个字节但是返回值是50,这不是也错误而是可能文件已经读到尾部了,read函数的错误返回值永远是-1.

1.open函数
函数原型:
    int open(const char *pathname, int flags);
    int open(const char *pathname, int flags, mode_t mode);
入参:
    pathname	打开/创建的文件名
    flags	文件的打开模式,常用O_RDONLY, O_WRONLY, O_RDWR
    mode	创建文件时需要指定,用来设置创建文件的权限(rwx)
回参:
    返回值类型:int
    调用成功时返回一个文件描述符fd
    调用失败时返回-1,并设置errno
2.read函数
函数原型:
    ssize_t read(int fd, void *buf, size_t count);

入参:
    fd	即将读取文件的文件描述符
    buf	存储读入数据的缓冲区
    count	将要读入的数据的个数
回参:
    返回值类型是:ssize_t,32位机上等同于int
    成功时返回读取的字节数
    出错时返回EOF,读到文件末返回0
3.write函数
函数原型:
     ssize_t write(int fd, const void *buf, size_t count);

入参:
    fd	即将读取文件的文件描述符
    buf	要写入的数据缓冲区
    count	写入数据的个数,大小不应该大于buf大小
回参:
    回值类型为:ssize_t
    成功时返回写入的字节数
    出错时返回EOF,读到文件末返回0
4.close函数
函数原型:
     int close(int fd);

入参:
    fd: 要关闭的文件描述符。
回参:
    关闭成功时返回0,出错时返回EOF.。

2.2文件IO综合实验

hexdump -C可以以十六进制的方式查看文件

思路:

第一步:当然是使用open函数打开两个文件了,对于原数据文件只需要通过只读的方式打开,对于目标文件就需要读写、创建以及截断。

第二步:一行一行的读取数据,重点是怎么判读是否读取完一行(通过判断\r\n),还有怎么判断是读取完了一行还是读取完了整个文件(读到文件尾部了并且一个数据都没有读进来)。

第三步:每读取一行就对读取到的数据进行处理。在处理数据过程中需要注意的就是,所以当我们判断第一行的时候,不是直接判断逗号,而是0xef,因为第一行的数据不需要我们改写,可以直接使用strcpy方法,之后的数据可以借助sscanf方法进行处理,将数据分割开来,然后相加就可以得出结果了。

最后,就是使用write函数将处理好的数据写入目标文件。

结果:

原数据文件

执行后的目标文件

这里第一行没显示出来是因为我把strcpy两个参数写反了,第一个参数应该是目标文件,第二个参数是原数据文件。

2.3文件IO 系统调用内部机制

app----->glibc来-------->Linux内核

app调用函数,glibc就会设置原因通过触发异常(swi、svc)的方式调用这些接口,系统接收到异常就会处理异常

可以参考手册第四篇第四章4.4

2.4dup函数

补充:

对于课程中给出的通用Makefile文件,怎么去使用。

我们需要指定去编译哪些文件那些目录,这是通过修改obj-y这一变量去指定的,编译在其他目录下的文件,先是要指定那个目录,然后再在那个目录下创建一个Makefile文件,也是要通过obj-y这个变量去添加编译文件。

        ————所学课程为百问网韦老师的《手把手教你嵌入式Linux快速入门到精通 | Linux应用驱动开发基于I.MX6ULL/STM32MP157/T113/D1H开发板》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值