嵌入式Linux文件I/O实验

一、实验目的和要求

       1、掌握基本的文件I/O函数的使用。

       2、编写代码,实现将文件A中的内容拷贝到文件B中,并在屏幕上输出文件A的长度,在文件B的结尾写入自己的学号。

       3、将编译生成的文件传输到开发板上执行测试。

二、实验主要仪器和设备

       1、装有ubuntu10.04系统及配置了tftp、交叉编译环境的win7电脑一台。

       2、Cortex-A9多核开源嵌入式试验箱一台。

       3、串口线及网线各一条。

三、实验原理

与windows不同,Linux操作系统都是基于文件概念的,文件是以字符序列构成的信息载体。根据这一点,可以把I/O设备当做文件来处理。因此,与磁盘上的普通文件进行交互所用的同一系统调用可以直接用于I/O设备。这样大大简化了系统对不同设备的处理,提高了效率。本次实验所用到的五个函数为open()、read()、write()、lseek()、close()。这些函数的特点是不带缓存,直接对文件(包括设备)进行读写操作。

实现思路:

  1. 打开文件A、文件B;
  2. 将数据写入文件A;
  3. 将文件A指针置于开头位置;
  4. 从文件A中读数据到缓冲区;
  5. 获取文件A的长度;
  6. 将缓冲区中内容写入文件B;
  7. 将姓名学号添加到文件B末尾;
  8. 关闭文件A、文件B。

四、实验方法与步骤

1.编写源代码

#include <stdio.h>

#include <stdlib.h>

#include <sys/stat.h>

#include <sys/types.h>

#include <unistd.h>

#include <fcntl.h>

int main(void)

{

       int fd1, fd2, ret, count;

       char buf[128];

       char data[] = "abcdefghigklmnopqrstuvwxyz\n";

       char std[] = "zhangyu 214300126\nhewenjing 214070304\nhexinyi 214070303\nliurui 214070310\n";     //输入自己的姓名拼音学号

       if((fd1 = open("A.txt", O_RDWR | O_CREAT, 644)) == -1)

              {perror("open");exit(-1);}

       if((fd2 = open("B.txt", O_RDWR | O_CREAT, 644)) == -1)

              {perror("open");exit(-1);}

       if((write(fd1, data, sizeof(data))) == -1)     //将数据写入文件A

              {perror("write");exit(-1);}       

       lseek(fd1,0,SEEK_SET);                   //将文件A指针置于开头

       if((count = (read(fd1, buf, sizeof(buf)))) == -1)//文件A内容读到缓冲区

              {perror("read");exit(-1);}

      ret = lseek(fd1, 0, SEEK_END);            //获取文件A长度       

       printf("Length of file A:%d\n", ret);

       

       if(write(fd2, buf, count) == -1)           //缓冲区内容写入文件B

              {perror("write");exit(-1);}

       if((write(fd2, std, sizeof(std))) == -1)  //姓名学号写入文件B

              {perror("write");exit(-1);}

       close(fd1);

       close(fd2);

       return 0;

}

  1. 交叉编译源代码

  1. 使用TFTP服务将交叉编译的可执行文件下载到fileio目录

  1. 在实验箱端为fileio2提权并执行

  1. 执行ls显示fileio目录下文件

  1. 执行cat A.txt,打印文件A内容

  1. 执行cat B.txt,打印文件B内容

五、实验总结

1.文件读写操作:

在实验中,我学习了如何在嵌入式Linux系统上进行文件读取和写入操作。通过使用标准的文件I/O函数如open、read和write,我能够实现对文件的读写操作。

2.文件权限和路径:

了解文件权限和路径对于文件I/O操作至关重要。在实验中,我学会了如何设置文件权限以及正确处理文件路径,确保能够顺利读取和写入文件。

3.错误处理:

在进行文件I/O操作时,我遇到了一些常见的错误,如文件不存在、权限不足等。通过实验,我学会了如何正确处理这些错误情况,以避免程序崩溃或数据丢失。

4.文件操作性能:

了解文件I/O操作的性能对于优化系统性能至关重要。通过实验,我学习了如何评估文件读写的性能,并尝试了一些优化方法,如减少磁盘访问次数和合并写操作。

5.实验心得:

通过文件I/O实验,我深刻体会到了文件操作在嵌入式系统中的重要性。正确地进行文件读写操作不仅能够存储和获取数据,还可以实现配置文件的读取和日志信息的记录。

6.持续学习:

在嵌入式系统开发中,不断学习和提升文件I/O操作的技能是至关重要的。深入了解文件系统和文件操作的原理,可以帮助我们更好地利用文件I/O功能。

7.遇到的问题及解决方法:

  1. 虚拟网连接时以及在虚拟机下载安装gcc编译器时虚拟机的网络适配器为NAT模式联网环境。
  2. 利用TFTP服务实现试验箱与虚拟机之间的文件传输时,虚拟机的网络设置改为桥接模式,且要给虚拟机添加串口,此事确保虚拟机是在关机的状态,不然无法设置。
  3. 需在我的电脑→属性→设备管理器→下拉“端口”查看电脑的串口号,每个人的电脑串口号不同
  4. 串口拒绝访问时检查开发板串口线是否正确接在“RS2332 2#”端口,也可能是由于虚拟机正在占用串口,尝试关闭虚拟机之后再点击reconnect。
  5. 如果ping不通,解决方法如下:

      检查主机与实验板网线是否正确连接。

      检查虚拟机网络是否设置为桥接模式。

      检查双方分配的IP是否还有效,若无效则重新指定。实验箱通常需要执行两次ifconfig才能成功设置IP地址,确保虚拟机和试验箱使用ifconfig检查之后均可以显示正确配置的IP地址后,再互相ping。

  1. 双方ping通后若出现传输文件超时的问题,有可能是虚拟机重启后TFTP服务未成功开启。则需执行重启TFTP服务的步骤,这一步的前提是虚拟机IP地址已配置好。
  2. 若无法运行文件,则需提升权限。

通过这次文件I/O实验,我积累了宝贵的经验和知识,对文件读写操作在嵌入式Linux系统中的应用有了更深入的理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

miraitowa....

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值