操作系统实验——文件管理(fopen()、fclose()、fread()、fwrite()的使用)实现文件的复制

操作系统实验——文件管理(fopen()、fclose()、fread()、fwrite()的使用)实现文件的复制

一:实验目的

1、熟悉Linux文件系统的文件和目录结构,掌握Linux文件系统的基本特征;
2、模拟实现Linux文件系统的简单I/O流操作:备份文件。

二:实验内容

1、浏览Linux系统根目录下的子目录,熟悉每个目录的文件和功能;
2、设计程序模拟实现Linux文件系统的简单I/O流操作:备份文件。

三:实验原理

目录 描述
/ 根目录

/bin

做为基础系统所需要的最基础的命令就是放在这里。比如 ls、cp、mkdir等命令;功能和/usr/bin类似,这个目录中的文件都是可执行的,普通用户都可以使用的命令。

/boot

Linux的内核及引导系统程序所需要的文件,比如 vmlinuz initrd.img 文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录;启动装载文件存放位置,如kernels,initrd,grub。一般是一个独立的分区。

/dev

一些必要的设备,声卡、磁盘等。还有如 /dev/null. /dev/console /dev/zero /dev/full 等。

/etc

系统的配置文件存放地. 一些服务器的配置文件也在这里;比如用户帐号及密码配置文件;
/etc/opt:/opt对应的配置文件
/etc/X11:Xwindows系统配置文件
/etc/xml:XML配置文件
……

/home

用户工作目录,和个人配置文件,如个人环境变量等,所有的账号分配一个工作目录。一般是一个独立的分区。

/lib

库文件存放地。bin和sbin需要的库文件。类似windows的DLL。

/media

可拆卸的媒介挂载点,如CD-ROMs、移动硬盘、U盘,系统默认会挂载到这里来。

/mnt

临时挂载文件系统。这个目录一般是用于存放挂载储存设备的挂载目录的,比如有cdrom 等目录。可以参看/etc/fstab的定义。

/opt

可选的应用程序包。

/proc

操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录伪装的文件系统proc的挂载目录,proc并不是真正的文件系统,它的定义可以参见 /etc/fstab 。

/root

Root用户的工作目录

/sbin

和bin类似,是一些可执行文件,不过不是所有用户都需要的,一般是系统管理所需要使用得到的。

/tmp

系统的临时文件,一般系统重启不会被保存。

/usr

包含了系统用户工具和程序。

/usr/bin:

非必须的普通用户可执行命令

/usr/include:

标准头文件

/usr/lib:

/usr/bin/ 和 /usr/sbin/的库文件

usr/sbin:

非必须的可执行文件

/usr/src:

内核源码

/usr/X11R6:X Window System, Version 11, Release 6.

/srv

该目录存放一些服务启动之后需要提取的数据

三、实验中用到的系统调用函数(包括实验原理中介绍的和自己采用的),自己采用的系统调用函数要按照指导书中的格式说明进行介绍。

没有用到系统函数,用c语言写代码,调用的是 <stdio.h> 文件下的fopen()\fclose()\fread()\fwrite()

(1) fopen():

     FILE* fopen( const char* path,const char* mode)
  文件顺利打开后 指向该流的文件指针就会被返回,如果文件打开失败则返回null.并把错误代码存在errno中

fopen_s:
errno_t fopen_s(FILEpFile,const charfilename,const charmode);
errno_t_wfopen_s(FILE
pFile,const wchar_tfilename,const wchar_tmode);
pFile:文件指针将接收到打开的文件指针指向的指针。Infilename:文件名
Inmode :允许访问的类型
返回值:如果成功返回=,失败则返回相应的错误代码

(2) Fclose()

Int fclose(FILE*stream)
Stream: 是一个文件对象的指针指定的数据流被关闭。
返回值: 此方法返回0,如果流成功关闭了则返回EOF

(3)fread():

原型
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
      ptr:指向保存结果的指针;size:每个数据类型的大小;count:数据的个数;stream:文件指针
返回值:函数返回读取数据的个数。

(4)fwrite():

原型:
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
ptr:指向保存数据的指针;size:每个数据类型的大小;count:数据的个数;stream:文件指针
返回值:函数返回读取数据的个数。写操作fwrite()后必须关闭流fclose()。

五、实验步骤

先创建一个基础二进制流文件(bct.dat) 路径为:(/home/bct/桌面/bct.dat)
创建一个main函数,然后建立两个文件指针 fp1和fp2,
读取fp1 将fp1读取写入到fp2中,结束;

实验数据及源代码

创建的基础文件为:bct.dat
基础文件的创建
基础文件的创建


#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
 
#define PATH1 "/home/bct/桌面/bct.dat"
#define PATH2 "/home/bct/桌面/tcb.dat"
 
#define READ_BUFF 1024
 
int main()
{
    FILE *fp1, *fp2;
    int c = 0;
    char buf[READ_BUFF] = {0};
    if ((fp1 = fopen(PATH1, "r")) == NULL) {
       printf("get bct.dat fp fail");
       exit(1);
    }
    if ((fp2 = fopen(PATH2, "w")) == NULL) {
       printf("get tcb.dat fp fail\n");
       exit(1);
    }
    while((c = fread(buf, sizeof(char), READ_BUFF, fp1)) > 0) {
       fwrite(buf, sizeof(char), c, fp2);
    }
    if(fclose(fp1) != 0) {
       puts("close fp1 fail");
    }
    if(fclose(fp2) != 0) {
      puts("close fp2 fail");
    }
    return 0;
}
 

七、实验结果分析(截屏的实验结果,与实验结果对应的实验分析)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
程序可以进行对文件的复制,这里只建立的基础文件,说明函数write可以实现写和创建文件共同执行。在做实验的过程中,出现过一次错误,就是文件的路径没有写对。在执行测试的时候,要细心找好文件的具体路径。

猜你喜欢

转载自blog.csdn.net/weixin_44002957/article/details/106795761
今日推荐