




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上实验三文件子系统文件操作实验类别:设计型 实验时数:2 学时开课单位:计算机学院计算机科学与技术系 实验地点:健翔校区计算中心一、实验目的通过本实验练习,使学生掌握有关文件管理与文件操作的内容。首先要熟悉在 LINUX 系统下文件系统的构建方法;其次要熟练掌握在 LINUX环境下用 C 语言进行高级编程的方法(即有关文件操作的系统调用的使用),进而充分了解 LINUX 文件系统中 shell 命令的实现原理以及它们用到的系统调用。二、实验环境操作系统:任何 Unix/Linux 及 Sun Solaris 或 windows 系列应用系统:gcc 编译器。若 OS 为
2、 windows 系列,则还需相应的模拟环境三、预备知识1、 关于系统调用和库函数C 语言支持一系列的库函数的调用,其中最基本的是 studio 库函数。事实上,库函数只是 C 语言在较高层次上调用的方式,系统调用是更低层次的与 C 语言的界面,是内核提供给用户调用的函数。2、 LINUX 环境下系统调用和库函数的异同(1)C 程序使用系统调用的语句和调用库函数的语句形式完全相同,但是二者运行的环境和运行机制截然不同。(2)从运行环境来看,库函数使用依赖于所运行的用户环境,程序调用库函数时,它运行的目标代码是属于程序的,程序处于“用户态”执行;而系统调用的使用不依赖于它运行的用户环境,是 LI
3、NUX 内核提供7的低层服务,系统调用时所执行的代码是属于内核的,程序处于“核心态”执行。(3)程序库函数的调用最终还是要通过 LINUX 系统调用来实现,库函数一般执行一条指令,该指令(操作系统陷阱 operatingsystem trap)将进程执行方式变为核心态,然后使内核为系统调用执行代码。四、实验内容本实验要求在 LINUX/UNIX 环境下用 C 语言编写三个具体的 SHELL命令,基本涉及了 LINUX/UNIX 文件系统中较为常用的有关文件操作的系统调用。内容如下:(1)编程实现 copy 命令,执行格式:copyfile1file2file3功能:将 file1、file2
4、两文件的内容合并拷入 file3 中,其中间应有 30个字节的空洞。程 序 可 能 涉 及 到 的 系 统 调 用 : read(), write(), open(), creat(),close(), lseek()完成后,注意查看文件 file3 的大小和内容。实验代码:#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <stdio.h>#include <unistd.h>int main(i
5、nt argc, char const *argv)int file1,file2,file3;file1=open(argv1,O_RDONLY);file2=open(argv2,O_RDONLY);file3=open(argv3,O_CREAT|O_RDWR,S_IRWXU);int n;char buf1024;while ( n=read(file1,buf,1024)>0) write(file3,buf,n);lseek(file3,30,SEEK_END);while ( n=read(file2,buf,1024)>0) write(file3,buf,n);c
6、lose(file1);close(file2);close(file3);printf("finishn");return 0;实验截图:(2)编程实现 renam(即 LINUX 下的 rename)命令,功能是实现文件的重命名。执行格式:renamfileafileb;其中 filea 为源文件,fileb 为目标文件程 序 可 能 涉 及 到 的 系 统 调 用 : read(), write(), open(), creat(),close(), link(), unlink()实验代码:#include <unistd.h>#include <
7、stdio.h>#include <errno.h>int main(int argc,char* argv) link(argv1,argv2); unlink(argv1);printf("finishn");return 0;实验截图:(3)编程实现:使用 symlink()创建当前目录下文件 f1 的符号链接文件 f2,在理解 stat 结构内容的基础上分别使用 stat()和 lstat()系统调用显示文件 f2 的信息(即 stat 结构的内容),比较两次输出的结果有何异同。8程 序 可 能 涉 及 到 的 系 统 调 用 : open(),
8、close(),stat() , lstat() ,symlink()实验代码:#include <sys/stat.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(int argc,char* argv) struct stat state;/*链接*/symlink(argv1,argv2);stat(argv2, &state);printf("%s的stat大小=%d字节n",argv2, (int)state.st_size
9、);lstat(argv2, &state);printf("%s的lstat大小=%d字节n",argv2, (int)state.st_size);return 0;实验截图:五、实验心得 通过本次实验掌握有关文件管理与文件操作的内容学会了编写简单的c程序在ubuntu环境下应用学会了用c语言编写实现 copy 命令,编程实现 renam(即 LINUX 下的 rename)命令, 编程实现:使用 symlink()创建当前目录下文件 f1 的符号链接文件 f2,在理解 stat 结构内容的基础上分别使用 stat()和 lstat()系统调用显示文件 f2 的信息(即 stat 结构的内容。六、使用系统调用时的注意事项以下列出了几条系统调用和库函数有关出错处理的不同点,更多的内容还需大家通过编程积累。(1)对于 studio 库中的函数,出错时会返回一个预定义的常量 EOF 或NULL;许多库函数在出错时常常返回 0 或 1 ;有些库函数则返回某
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 备考阶段总结:2024年图书管理员考试试题及答案
- 中医康复理疗师考试实战试题及答案
- 2025年中考二轮复习语文名著阅读专项特训营:7.《经典常谈》(含解析)
- 2025年中国高消费旅客出境游洞察
- 分布式计算、云计算与大数据 第2版 课件 第3章 WEB原理与应用开发方法
- 电气值班员(电力调度)-初级工习题库(附参考答案)
- 2024年八年级语文上册 第二单元 第7课《列夫 托尔斯泰》教学实录 新人教版
- 三峡语文课件
- 外墙材料知识培训班课件
- 叶菜知识培训课件下载
- 新版医疗机构消毒技术规范
- 2024年包头钢铁职业技术学院高职单招(英语/数学/语文)笔试题库含答案解析
- smc片材模压工艺特点
- 高中预防校园欺凌
- 部编版六年级上册第一单元道德与法治考试题(含答案)
- 综合自动化在35kV6kV变电站设计和应用的中期报告
- 人血白蛋白介绍演示培训课件
- 自助洗头商业计划书
- 报价单(报价单模板)
- 口腔医院口腔种植病历全
- (完整版)发酵原理及工艺
评论
0/150
提交评论