资源描述:
《2017孟启贤实验四Linux下的C语言编程.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验报告课程名称Linux系统实践__实验项目Linux下的C语言编程实验仪器PC___________系别计算机学院___专业网络工程____班级/学号网1702/学生姓名孟启贤_____实验日期5.13______成绩___________________指导教师李艳平____实验四Linux下的C语言编程实验类别:设计型实验时数:6学时开课单位:计算机学院实验地点:健翔校区计算中心一、实验目的通过本实验练习,使学生掌握有关文件管理与文件操作的内容。首先要熟悉在LINUX系统下文件系统的构建方法;其次要熟练掌握在LINUX环境下用C语言进行高级编程的方法(即有关文件操作的系统调用的使用),
2、进而充分了解LINUX文件系统中shell命令的实现原理以及用到的系统调用。二、实验环境操作系统:任何Unix/Linux或MAC编译器:gcc三、预备知识1、关于系统调用和库函数C语言支持一系列的库函数的调用,其中最基本的是studio库函数。事实上,库函数只是C语言在较高层次上调用的方式,系统调用是更低层次的与C语言的界面,是内核提供给用户调用的函数。2、LINUX环境下系统调用和库函数的异同⑴C程序使用系统调用的语句和调用库函数的语句形式完全相同,但是二者运行的环境和运行机制截然不同。⑵从运行环境来看,库函数使用依赖于所运行的用户环境,程序调用库函数时,它运行的目标代码是属于程序的,程序
3、处于“用户态”执行;而系统调用的使用不依赖于它运行的用户环境,是LINUX内核提供的低层服务,系统调用时所执行的代码是属于内核的,程序处于“核心态”执行。⑶程序库函数的调用最终还是要通过LINUX系统调用来实现,库函数一般执行一条指令,该指令(操作系统陷阱operatingsystemtrap)将进程执行方式变为核心态,然后使内核为系统调用执行代码。四(1)、实验内容本实验要求在LINUX/UNIX环境下用C语言完成SHELL命令的编写,基本涉及了LINUX/UNIX文件系统中较为常用的有关文件操作的系统调用。内容如下:1、编程实现lnk命令,执行格式:lnkf1f2f3。具体要求如下:⑴分别
4、使用link()和symlink()为文件f1(任意)创建其硬链接文件f2和符号链接文件f3。⑵分别使用stat()和lstat()调用给出文件f2和f3的索引节点号、权限、存放该文件的设备号及文件修改时间,比较其异同。说明原因。#include#include#include#include#includeintmain(intargc,charconst*argv[]){structstatbuf;if(argc!=4){printf("inputerror");return0;}
5、if(link(argv[1],argv[2])==-1){printf("linkerror");return0;}if(symlink(argv[1],argv[3])==-1){printf("symlinkerror");return0;}if(stat(argv[2],&buf)==-1){printf("statf2error");return0;}printf("statf2");printf("索引号节点号:%ld",buf.st_ino);printf("权限:%o",buf.st_mode);printf("设备号:%ld",buf.st_dev
6、);printf("文件修改时间:%ld",buf.st_mtime);if(stat(argv[3],&buf)==-1){printf("statf3error");return0;}printf("statf3");printf("索引号节点号:%ld",buf.st_ino);printf("权限:%o",buf.st_mode);printf("设备号:%ld",buf.st_dev);printf("文件修改时间:%ld",buf.st_mtime);if(lstat(argv[2],&buf)<0){printf("lstatf2error");r
7、eturn0;}printf("lstatf2");printf("索引号节点号:%ld",buf.st_ino);printf("权限:%o",buf.st_mode);printf("设备号:%ld",buf.st_dev);printf("文件修改时间:%ld",buf.st_mtime);if(lstat(argv[3],&buf)<0){printf("lstatf3