北京信息科技大学Linux实验报告3
更新时间:2023-12-25 09:22:01 阅读量: 教育文库 文档下载
实验三
文件子系统——文件操作
实验类别:设计型 实验时数:2 学时
开课单位:计算机学院计算机科学与技术系 实验地点:健翔校区计算中心
一、实验目的
通过本实验练习,使学生掌握有关文件管理与文件操作的内容。首先
要熟悉在 LINUX 系统下文件系统的构建方法;其次要熟练掌握在 LINUX
环境下用 C 语言进行高级编程的方法(即有关文件操作的系统调用的使
用),进而充分了解 LINUX 文件系统中 shell 命令的实现原理以及它们用到
的系统调用。
二、实验环境
操作系统:任何 Unix/Linux 及 Sun Solaris 或 windows 系列
应用系统:gcc 编译器。若 OS 为 windows 系列,则还需相应的模拟环境
三、预备知识
1、 关于系统调用和库函数
C 语言支持一系列的库函数的调用,其中最基本的是 studio 库函数。事
实上,库函数只是 C 语言在较高层次上调用的方式,系统调用是更低
层次的与 C 语言的界面,是内核提供给用户调用的函数。
2、 LINUX 环境下系统调用和库函数的异同
(1)C 程序使用系统调用的语句和调用库函数的语句形式完全相同,但是
二者运行的环境和运行机制截然不同。
(2)从运行环境来看,库函数使用依赖于所运行的用户环境,程序调用库
函数时,它运行的目标代码是属于程序的,程序处于―用户态‖执行;
而系统调用的使用不依赖于它运行的用户环境,是 LINUX 内核提供
7的低层服务,系统调用时所执行的代码是属于内核的,程序处于―核
心态‖执行。
(3)程序库函数的调用最终还是要通过 LINUX 系统调用来实现,库函数
一般执行一条指令,该指令(操作系统陷阱 operating
system trap)
将进程执行方式变为核心态,然后使内核为系统调用执行代码。
四、实验内容
本实验要求在 LINUX/UNIX 环境下用 C 语言编写三个具体的 SHELL
命令,基本涉及了 LINUX/UNIX 文件系统中较为常用的有关文件操作的系
统调用。内容如下:
(1)编程实现 copy 命令,执行格式:copy file1 file2 file3
功能:将 file1、file2 两文件的内容合并拷入 file3 中,其中间应有 30
个字节的空洞。
程 序 可 能 涉 及 到 的 系 统 调 用 : read(), write(), open(), creat(),
close(), lseek()
完成后,注意查看文件 file3 的大小和内容。 实验代码:
#include
int main(int argc, char const *argv[]) { int file1,file2,file3; file1=open(argv[1],O_RDONLY); file2=open(argv[2],O_RDONLY); file3=open(argv[3],O_CREAT|O_RDWR,S_IRWXU); int n;
char buf[1024]; 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); close(file1); close(file2); close(file3); printf(\ return 0; }
实验截图:
(2)编程实现 renam(即 LINUX 下的 rename)命令,功能是实现文件的重命名。
执行格式:renam filea
fileb;
其中 filea 为源文件,fileb 为目标文件
程 序 可 能 涉 及 到 的 系 统 调 用 : read(), write(), open(), creat(),
close(), link(), unlink()
实验代码:
#include
#include
int main(int argc,char* argv[]) { link(argv[1],argv[2]); unlink(argv[1]); printf(\ return 0; }
实验截图:
(3)编程实现:使用 symlink()创建当前目录下文件 f1 的符号链接文件 f2,
在理解 stat 结构内容的基础上分别使用 stat()和 lstat()系统调用显示
文件 f2 的信息(即 stat 结构的内容),比较两次输出的结果有何异同。
8程 序 可 能 涉 及 到 的 系 统 调 用 : open(), close(),stat() , lstat() ,
symlink()
实验代码:
#include
int main(int argc,char* argv[]) { struct stat state; /*链接*/ symlink(argv[1],argv[2]);
stat(argv[2], &state); printf(\的stat大小=%d字节\\n\ lstat(argv[2], &state); printf(\的lstat大小=%d字节\\n\ return 0; }
实验截图:
五、实验心得
通过本次实验掌握有关文件管理与文件操作的内容学会了编写简单的c程序在ubuntu环境下应用学会了用c语言编写实现 copy 命令,
编程实现 renam(即 LINUX 下的 rename)命令, 编程实现:使用 symlink()创建当前目录下文件 f1 的符号链接文件 f2,
在理解 stat 结构内容的基础上分别使用 stat()和 lstat()系统调用显示文件 f2 的信息(即 stat 结构的内容。
六、使用系统调用时的注意事项
以下列出了几条系统调用和库函数有关出错处理的不同点,更多的内
容还需大家通过编程积累。
(1)对于 studio 库中的函数,出错时会返回一个预定义的常量 EOF 或
NULL;许多库函数在出错时常常返回 0 或 –1 ;有些库函数则返
回某种出错代码。
(2)系统调用的出错处理比较简单,每个系统调用在出错时都返回 –1 ,
在调用成功时返回 0 (或某些其他具有特定意义的整数值)。 LINUX 系
统调用把出错代码放在一个名为 error 的外部变量中,在程序中包含
头文件 error.h,便可以得到 error 的错误代码。
正在阅读:
北京信息科技大学Linux实验报告312-25
比较文学研究简答题答案04-21
罗茨风机工作原理和图09-04
碳纤维加固方案01-07
大学入学生会申请书02-24
职称评审工作总结04-01
高一寒假作业(十五)氨 硝酸 硫酸08-27
地下室防水技术交底记录09-29
中学教师奖励性绩效工资考核实施办法01-01
部队百日安全板报02-12
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 北京
- 实验
- 报告
- 大学
- Linux
- 科技
- 信息