【精品博文】Itop4412学习笔记(2)

今天学习的是文件IO的操作,需要记录的点:

1.库函数头文件

在所有Linux系统中,对文件的操作都只需包含下面四个头文件即可:

#include <unistd.h>     #include <sys/types.h>     #include <sys/stat.h>     #include <fcntl.h>

2.打开文件函数open

open函数会返回一个文件句柄,下面是函数open的两种原型:

    int open(const char *path,int oflags);

    int open(const char *path,int oflags,mode_t mode);

open函数有2到3个参数,其返回值为对应文件的句柄:

1.第一个参数path为绝对路径

2.第二个参数oflags为读写方式等操作

    • 下面三个选项是必须选择其中之一的。

O_RDONLY 文件只读          O_WRONLY 文件只写          O_RDWR 文件可读可写

下面是可以任意选择的

3.第三个参数mode为设置创建文件的权限。

其参数设置可参照linux下的权限值,
      例如chmod 777 filename

下面是一个open的测试例程:

如果/bin/目录下已经存在leds和test1文件,那么三个fd都会返回对应的值,否则只有test2能返回句柄值。

3.创建文件函数 creat

creat函数用法与open函数相同且完全可以用open函数代替,现在已经很少使用creat函数,下面是其函数原型:

int creat(const char *path,
     mode_t mode);

creat函数只有两个参数,返回值为对应文件句柄,其参数定义可参照open函数:

    • 第一个参数path为绝对路径

    • 第二个参数mode为设置创建文件的权限

      其测试例程这里不再贴出

4.关闭文件函数close

任何一个文件在操作完成之后都需要关闭,即通过close函数来实现,调用close 函数之后,会取消open 函数建立的映射关系,句柄将不再有效,占用的空间将被系统释放。下面是其函数原型:

int close(int fd);

clsoe函数的参数很简单且只有一个,返回值一般很少使用:

    • 参数fd为使用open函数打开对应文件所返回的句柄

      其调用方法较为简单,例程在后续实验中会用到。

5.写入文件函数write

对已经打开的文件进行写入操作的函数,其函数原型为:

ssize_t write(int fd ,
     const void *buf,size_t count);

write函数有三个参数一个返回值,返回值类型为ssize,出错时返回-1,其他值返回实际写入字节数:

    • 第一个参数fd,是对应文件open操作时返回的句柄

    • 第二个参数*buf,是需要写入的数据

    • 第三个参数count,表示将第二个参数*buf中最多count个字节写入对应文件

    write函数的例程如下:

最终在屏幕上输出

Write Function OK! And the 
     length of input is 21

6.读取文件函数read

对文件进行读取操作,使用较为频繁,其函数原型为:

ssize_t read(int fd,void 
     *buf,size_t len);

read函数有三个参数一个返回值,返回值类型为ssize,出错时返回-1,其他值返回实际读取字节数:

    • 第一个参数fd,是对应文件open操作时返回的句柄

    • 第二个参数*buf,是读取数据保存的位置

    • 第三个参数len,表示每次从对应文件中读取最多count个字节存入第二个参数指定的位置。

      open函数的例程如下:

最终在屏幕上输出

Write Function OK And the length of input 
 is 21 ! Files Content is Hello Write Function!  
 And the length of read is 21 !

7.结束语

花了两个晚上才完成文件IO操作的学习,都是很基础的知识,以后用的也比较多,所以虽然比较简单但还是跟着教程一步一步走了一遍,希望能加深印象,共勉~

(0)

相关推荐

  • Linux(C/C++)下的文件操作open、fopen与freopen

    open是linux下的底层系统调用函数,fopen与freopen c/c++下的标准I/O库函数,带输入/输出缓冲. linxu下的fopen是open的封装函数,fopen最终还是要调用底层的系 ...

  • 基于KL26Z的串行TFT屏图像显示

    在KL25.KL26及KL27中,我最喜欢的是KL26开发板,这不但是因为它的硬件配置,也源于它的软件资源支持.别开它与其它板子比起来并不起眼,但基于这块开发板和所提供的例程,能将它打造成一个简单的多 ...

  • lvgl最新版本在STM32上的移植使用

    前言 有读者在后台回复了LVGL,应该是想获取本公众号关于LVGL的内容.之前推送关于LVGL的内容较少,现在补上一篇. 另:本公众号由于开通得比较晚,所以不具备留言功能.所以大家想看哪些内容,可以在 ...

  • 【精品博文】Itop4412学习笔记(1)

    学习了ubuntu下自己编译最小Linux系统,大概步骤为构建根文件系统+编译:具体这里不再记录. 需要记录下来的是给itop4412烧写系统的方法:  1. COM3用串口或者串口转USB连接到电脑 ...

  • 【精品博文】学习FPGA第一天

    用case语句实现一个计数器 module ex_case(                        input wire rst_n, input wire sclk, output reg ...

  • 【精品博文】Zedboard 学习笔记之《ZYNQ中断的学习》

    由于ZYNQ芯片内部有ARM处理器,那么必然具有到中断资源.我们在学习嵌入式时,中断总是很重要但是很复杂的东西,那么现在来回顾一下当中断来临时的处理过程: -中断待处理. -处理器停止执行当前的线程. ...

  • 【精品博文】Zedboard 学习笔记之《XADC的使用》

    赢一个双肩背包 有多难? 戳一下试试看! →_→ 长摁识别 在Xilinx的7系列芯片上,有一个XADC模块,这是一个双12bit的模数转换器.通过该模块,我们可以检测芯片的外部输入的各种电压和温度等 ...

  • 【博文精选】AMBA学习笔记——AXI Stream详解

    AXI Stream一般被翻译为AXI流协议,是AXI总线的一种演化版本.AXI4流协议作为一个标准接口,用于连接进行数据交换的组件.接口可以用来连接一个单一的主机,主机向接收数据的单一从 机发送数据 ...

  • 【精品博文】xilinx和altera学习FPGA好方法

    学几年fpga也是学的一坨屎,是因为你没遇到好的人给你带路,也没有好的公司给你练习. xilinx的FPGA学习方法,一个是芯片手册,XILINX的芯片手册不太好搜索,现在有专门的软件DOCnav的, ...

  • 【精品博文】基于ZC706,ZYNQ学习手记(2):用PL端点亮流水灯(第1部分)

    开发环境安装好之后,进行大家都喜闻乐见的第一个程序--点灯,本次使用纯逻辑端也就是PL端来控制ZC706开发板上的4个LED灯. 一.查看开发板原理图 打开之后,找到GPIO页面中四个LED灯位置 然 ...

  • 【精品博文】基于ZC706,ZYNQ学习手记(1):zynq开发环境搭建

    接触ZYNQ系列的片子半年了,可是楼主实际上开始学习FPGA也就是八九个月前的事.在与实验室BOSS老白的第一次见面时,第一次从老白那听到了PCIE接口这个词,然后楼主就一脸懵逼的被接受了任务,并要求 ...

  • 【精品博文】openMSP430 应用笔记

    openMsp430 是OpenCore 上的一款很小巧的开源MCU核,指令集完美兼容市面上MSP430 MCU.从2009年发布开始,一直到2015年,该core每年都有更新,可见作者对这个core ...