目录
- 一、实验目的
- 二、实验内容
- 三、实验环境
- 四、参考代码
- 五、实验步骤
- 步骤1. 编辑程序源代码test2.c
- 步骤2. 编译源代码test2.c
- 步骤3. 编辑源文件alice.txt
- 步骤4. 运行程序test2
- 六、实验结果
- 七、实验总结
一、实验目的
1、掌握Linux中系统调用、文件描述符的基本概念;
2、掌握文件I/O的基本系统调用,如open, read, write, lseek, close等。
二、实验内容
将源文件中最后10KB字节拷贝到目标文件中。
三、实验环境
虚拟机软件:VMware 16 Pro
Linux操作系统版本:CentOS-7-64位
四、参考代码
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>#define BUFSIZE 1024
#define OFFSET 10240int main(int argc,char* argv[]){int src_fd,dst_fd;int offset_len,real_read;char answer;char buffer[BUFSIZE]={0};//判断输出格式是否正确,argv[1]代表源文件,argv[2]代表目标文件if(3!=argc){perror("format:./test2 <src_file><dst_file>");return -1;}//判断源文件是否可读if((src_fd = open(argv[1],O_RDONLY)) < 0){perror("Source file isn't exist or can't be permitted!");return -1;}//判断目标文件是否可写if((dst_fd = open(argv[2],O_WRONLY|O_CREAT,0644)) < 0){perror("Destination file cant' be created or permitted");return -1;}//移动文件读写指针,判断源文件大小是否大于10K,并予以处理if((offset_len = lseek(src_fd,-OFFSET,SEEK_END)) < OFFSET){printf("%s's size less than %d, continue <y> or <n>:",argv[1],OFFSET);scanf("%c",&answer);if('n'==answer)return 0;}//拷贝文件内容while( (real_read = read(src_fd, buffer, BUFSIZE)) > 0)write( dst_fd, buffer,real_read);close(src_fd);close(dst_fd);
}
五、实验步骤
步骤1. 编辑程序源代码test2.c
mkdir test2
cd test2
vim test2.c
步骤2. 编译源代码test2.c
gcc test2.c -o test2 -g
步骤3. 编辑源文件alice.txt
源文件内容可自行编辑,此处alice.txt仅供参考。
链接:https://pan.quark.cn/s/4b42ed483518
提取码:TdpA
vim alice.txt
步骤4. 运行程序test2
./test2 alice.txt dst_file
ls
cat dst_file
./test2
:是运行当前目录下的程序文件test2;alice.txt
:复制源文件alice.txt;dst_file
:拷贝到目标文件dst_file。
六、实验结果
运行程序test2,将源文件alice.txt中最后10KB字节拷贝到目标文件中dst_file中。结果如下:
七、实验总结
进行Linux文件IO操作的实验可以带来很多收获。首先,这样的实验可以帮助加深对文件系统和IO操作的理解。通过创建、读取、写入和删除文件等基本操作,可以更好地理解文件系统的组织结构以及如何在Linux环境中进行文件的管理。其次,通过实验可以学习到如何使用Linux系统提供的命令行工具或编程接口进行文件IO操作。比如,可以学习到使用命令行工具如cat、echo、mv、cp等来进行文件操作,也可以学习到如何使用C语言等来编写程序进行文件IO操作。
在实验过程中,可能会遇到一些常见的问题和挑战,比如文件权限、路径问题、文件格式等。解决这些问题需要不断地尝试和调试,从中积累经验和技巧。最重要的是,通过实验可以培养自己的动手能力和解决问题的能力。通过亲自动手进行文件IO操作,可以更深入地理解其中的原理和机制,并且在解决问题的过程中积累经验,提高自己的技术水平。
总的来说,进行Linux文件IO操作的实验是一个很有益的学习过程,可以帮助加深对Linux系统和文件系统的理解,提高自己的技术水平。