北京信息科技大学Linux,北京信息科技大学Linux实验报告3

实验3

文件子系统——文件操作

实验类别:设计实验学时:2学时

开设该课程的单位是计算机学院计算机科学与技术系实验基地——:建新校区计算机中心

一、实验目的

通过本实验练习,学生可以掌握文档管理和文档操作的内容。首先

熟悉LINUX系统下文件系统的构建方法;其次,我们应该熟练掌握LINUX。

环境下用C语言进行高级编程的方法(即进行与文件操作相关的系统调用的方法

用),然后充分理解LINUX文件系统外壳命令的实现原理及其用途

系统调用。

二、实验环境

操作系统:任何Unix/Linux和Sun Solaris或windows系列

应用系统:gcc编译器。如果操作系统是windows系列,还需要相应的模拟环境。

Iii .预备知识

1.关于系统调用和库函数

c语言支持一系列库函数调用,其中最基本的是studio库函数。东西

事实上,库函数只是C语言在更高层次上调用的方式,而系统调用是较低的。

C语言的分层接口是内核提供给用户调用的一个函数。

2.LINUX环境下系统调用与库函数的异同

(1)C程序用来调用系统的语句与用来调用库函数的语句完全相同,但是

两者的运行环境和机制完全不同。

(2)从运行环境的角度来看,库函数依赖于运行的用户环境,程序调用库函数

函数,它运行的目标代码属于程序,程序在“用户状态”下执行。

系统调用的使用并不依赖于运行它的用户环境,而是由LINUX内核提供的。

7、系统调用时执行的代码属于内核,而程序是在“内核

“实现的心态。

(3)库函数的调用最终通过LINUX系统调用来实现。图书馆功能

通常,指令(操作系统陷阱操作

系统陷阱)

将进程执行模式更改为核心状态,然后让核心执行系统调用的代码。

四.实验内容

这个实验需要在LINUX/UNIX环境下用C语言编写三个特定的SHELL

命令,基本上涉及到了LINUX/UNIX文件系统中较为常用的文件操作系统

系统调用。内容如下:

(1)编程实现复制命令和执行格式:复制

文件1

文件2

文件3

函数:将文件1和文件2的内容复制到文件3中,中间有30个。

一个字节洞。

可以通过: read(),write(),open(),create(),

close(),lseek()

完成后,请注意文件文件的大小和内容3。

实验代码:

#包括

#包括

#包括

#包括

#包括

#包括

int main(int argc,char const *argv[])

{

int文件1、文件2、文件3;

文件1=打开(参数[1],只读);

文件2=打开(参数[2],只读);

文件3=打开(参数[3],O_CREAT|O_RDWR,S _ IRWXU);

int n;

char buf[1024];

而((n=read(file1,buf,1024))0)

写(文件3,buf,n);

lseek(文件3,30,SEEK _ END);

而((n=read(file2,buf,1024))0)

写(文件3,buf,n);

关闭(文件1);

关闭(文件2);

关闭(文件3);

printf(' finish \ n ');

返回0;

}

实验截图:

(2)在LINUX下编程实现重命名命令。它的功能是重命名文件。

执行格式:renam

filea

fileb

其中,文件a是源文件,文件b是目标文件

可以通过: read(),write(),open(),create(),

关闭(),链接(),取消链接()

实验代码:

#包括

#包括

#包括

int main(int argc,char* argv[])

{

链接(argv[1],argv[2]);

取消链接(argv[1]);

printf(' finish \ n ');

返回0;

}

实验截图:

(3)编程实现:使用符号链接()在当前目录中创建文件f1的符号链接文件f2。

在理解stat结构内容的基础上,我们分别使用stat()和lstat()系统调用来显示

文件f2中的信息(即stat结构的内容)比较了两个输出结果之间的异同。

8次通过序列中可能涉及的系统有:开(),关(),stat(),lstat(),

符号链接()

实验代码:

#包括

#包括

#包括

#包括

int main(int argc,char* argv[])

{

结构状态;

/*链接*/

symlink(argv[1],argv[2]);

stat(argv[2],状态);

printf(“% s stat size=% d字节\n”,argv[2],(int)state . ST _ size);

lstat(argv[2],state);

printf(“% s lstat大小=%d字节\n”,argv[2],(int)state . ST _ size);

返回0;

}

实验截图:

五、实验结果

通过这次实验,我掌握了文件管理和文件操作的内容,学会了在ubuntu环境下编写简单的C程序,学会了用C语言编写和实现复制命令。

编程实现renam(即在LINUX下重命名)命令,编程实现:使用符号链接()来创建当前目录下文件f1的符号链接文件f2,

在理解stat结构内容的基础上,stat()和lstat()系统调用用于显示文件f2的信息(即stat结构的内容)。

六、使用系统调用时的注意事项

以下是关于错误处理的系统调用和库函数之间的一些区别。更多

能力仍然需要通过规划来积累。

(1)对于studio库中的函数,当发生错误时,将返回一个预定义的常量EOF或。

空;发生错误时,许多库函数通常返回0或1;一些库函数返回

回到某种错误代码。

(2)系统调用的错误处理相对简单。发生错误时,每个系统调用返回1。

当调用成功时,返回0(或其他具有特定含义的整数值)。LINUX系统

系统调用将错误代码放在程序中包含的名为error的外部变量中

头文件错误,你可以得到错误代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值