Linux实验二:文件IO操作


一、实验目的

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 10240

int 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系统和文件系统的理解,提高自己的技术水平。

  • 35
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Francek Chen

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

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

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

打赏作者

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

抵扣说明:

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

余额充值