




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、word实验四 文件系统班级: 姓名: 学号:实验目的1. 学习Unix下对目录文件信息的读取。2. 学习Unix下对普通文件操作的系统调用。预备知识目录文件操作所需头文件:#include <dirent.h>所需系统调用:DIR* opendir(const char* dirname);功能:翻开一个目录文件 成功 - 返回指向DIR类型对象的指针。失败 - 返回NULL函数返回值DIR 代表一个目录流的结构体int closedir(DIR *dirp);功能:关闭一个已经翻开的目录文件成功 - 返回0;失败 - 返回-1 struct dirent *readdir(DI
2、R *dirp);功能:读取目录流成功 - 返回指向struct dirent对象的指针,当前位置向后移。 失败 返回NULLstruct dirent long d_ino; /* inode number 索引节点号 */ off_t d_off; /* offset to this dirent 在目录文件中的偏移 */ unsigned short d_reclen; /* length of this d_name 文件名长 */ unsigned char d_type; /* the type of d_name 文件类型 */ char d_name NAME_MAX+1; /
3、* file name (null-terminated) 文件名,最长255字符 */文件操作所需头文件#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>所需系统调用:int open(const char *pathname, int flag, mode_t mode)功能:翻开一个文件,第一个参数为要翻开文件的路径,第二个参数为翻开文件的方式,第三个参数用于设定文件的权限位。返回值为所翻开文件的文件描述符。例子:int fd =
4、open(“./file, O_CREAT|O_TRUNC|O_RDWR, 0600);ssize_t write(int fd, const void *buf, size_t count)功能:像fd所指向的文件写入count个单位的buf中的数据。第一个参数为要写入文件的文件描述符;第二个参数为被写入数据所在的缓存区;第三个参数为写入单位个数。返回值:被成功写入的单位个数,或-1表示出错。例子:write(fd, buffer, 100);ssize_t read(int fd, void *buf, size_t count)功能:把fd所代表的文件中的内容从当前文件指针处文件指针用l
5、seek函数设定,默认为0,最开始读取count个,然后存入buf中。返回值:成功读取单位的个数,-1表示出错。off_t lseek(int fd, off_t offset, int whence)功能:对fd所代表的文件的操作指针进行定位。第一个参数为要操作文件的文件描述符;第二个参数为偏移量,其具体意义根据第三个参数而定。第三个参数whence 有以下三个选项:SEEK_SET 直接重设文件操作指针,指针位置由第二个参数给出。SEEK_CUR重设文件指针,该选项表示把指针从当前位置根据第二个参数所给定的数值进行偏移,第二个参数为负数表示向前移动offset个单位,为正数代表向后移动of
6、fset个单位。SEEK_END将文件操作指针移动到文件末尾, 再进行offset个单位的偏移量。返回值:返回被重定位后的指针的偏移量从文件头0开始计算)。例子:long file_length= lseek(fd, 0, SEEK_END);实验内容1. 根据前面的预备知识,补全下面的程序,该程序可以显示某个目录文件中所包含的文件名称及其所对应的i节点号。#include<stdio.h>#include<dirent.h>int main() DIR *dp; struct dirent *dirp; char dirname256; printf("Pl
7、ease input a directory: "); scanf("%s",dirname); if(dp = opendir(dirname) ) = NULL) printf("Can't open %sn", dirname); while(dirp = readdir(dp) ) != NULL) printf("%st%un", dirp->d_name , dirp->d_ino ); closedir(dp); return 0;2. 根据前面的预备知识,补全下面的程序,要求:该程序在磁盘
8、上创立一个文件file1,并按顺序在file1中存入从A-Z的26个字母。#include <fcntl.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <stdio.h>int main()int i;int fd;char buffer26="ABCDEFGHIJKLMNOPQRSTUVWXYZ"if(fd=open(“./file1,O_CREAT|O_RDWR,0600)write(fd, buffer, 26
9、);close(fd);return 0;3. 请写出第二个程序,改程序要求翻开第一个程序所创立的文件,然后重定位当前翻开文件指针到file1的中间位置,然后读取后面的所有信息并打印在屏幕上,完成屏幕打印后,将文件中的'N'、'O'两个字母替换为'1'、'0',然后保存到文件file1中。#include <fcntl.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <stdio.
10、h>int main()int i;int fd; char* c1=1; char* c2=0;char buffer13;if(fd=open(“./file1, O_RDWR,0600) file_length=lseek(fd,0,SEEK_END); lseek(fd, file_length/2,SEEK_SET);read(fd, buffer, file_length-file_length/2);printf(“%sn,buffer);lseek(fd,13,SEEK_SET);write(fd,c1,1);lseek(fd,0,SEEK_CUR);write(fd,c
11、2,1); close(fd);return 0;实验结果1. 目录操作程序运行结果截图,在程序同一目录中建立一个目录“folder,然后向folder中随意放置几个文件,运行程序,在让程序显示“folder中的信息,文件名和文件所对应的i节点号。在截图后请解释该程序系统调用及其参数:scanf("%s",dirname);程序获得文件名./folder存在字符串dirname中.dp = opendir(dirname)程序调用opendir(“./folder)翻开当前目录下的目录folder,并返回DIR结构体指针.if(dp = opendir(dirname) )
12、 = NULL)printf("Can't open %sn", dirname);假设dp为null,即文件不存在或有其他运行的问题,那么输出Cant open ./folderwhile(dirp = readdir(dp) ) != NULL)printf("%st%un", dirp->d_name, dirp->d_ino);调用readdir(dp)方法读取目录下的文件并将每个文件对应的信息结构体dirent存入dirp.输出dirp结构体中的文件名并对应的索引号i直到读完所有文件,即dirp=null.closedir(
13、dp);目录文件使用完毕,关闭文件.2. 文件操作第一个程序运行结果截图先用ls -l列出当前目录中的文件,然后运行第一个程序,再用cat命令显示生成文件的内容,在截图后请解释该程序系统调用及其参数:char buffer26="ABCDEFGHIJKLMNOPQRSTUVWXYZ"定义字符串buffer26来存储26个字母.fd=open(“./file1,O_CREAT|O_RDWR,0600)翻开(假设当前目录下没有file1那么创立并翻开)当前目录下的file1文件(可进行读写操作),并返回int变量(所翻开文件的文件描述符)的给fd.write(fd, buffe
14、r, 26);向文件file1中写入26个字符大小的字符串buffer.closedir(fp);文件使用完毕,关闭文件.3. 文件操作第二个程序运行结果截图运行第二个程序,然后用cat命令显示被修改正后的文件内容,在截图后请解释该程序系统调用及其参数。char* c1=1;char* c2=0;定义char*.fd=open(“./file1, O_RDWR,0600)翻开当前目录下的file1文件(可进行读写操作),并返回int变量(所翻开文件的文件描述符)的给fd.file_length=lseek(fd,0,SEEK_END);获得文件长度file_length.lseek(fd, file_length/2,SEEK_SET);重置文件指针于中间位置.read(fd, buffer, file
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年共享自行车行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年中国蔬果保鲜剂行业市场深度分析及发展趋势与投资研究报告
- 2025-2030年中国电压力煲行业市场现状供需分析及投资评估规划分析研究报告
- 四川工业科技学院《视觉导视设计》2023-2024学年第二学期期末试卷
- 南京理工大学《商业银行经营管理》2023-2024学年第二学期期末试卷
- 四川文理学院《建筑光学》2023-2024学年第二学期期末试卷
- 武汉航海职业技术学院《数控工艺与编程》2023-2024学年第二学期期末试卷
- 湖南铁道职业技术学院《智能终端软件开发》2023-2024学年第二学期期末试卷
- 沈阳师范大学《城市设计及其理论》2023-2024学年第二学期期末试卷
- 湖北黄冈应急管理职业技术学院《化工环保与安全》2023-2024学年第二学期期末试卷
- 伍德密封强度计算
- 重度子痫前期子痫急救演练
- 【超星尔雅学习通】《美术鉴赏》2020章节测试题及答案
- 洛宁华泰矿业洛宁县陆院沟金矿(新增储量)采矿权出让收益评估报告摘要
- GB/T 14002-2008劳动定员定额术语
- GB/T 13061-1991汽车悬架用空气弹簧橡胶气囊
- DB32T 3842-2020 土工袋护坡技术规范
- DB32T 4353-2022 房屋建筑和市政基础设施工程档案资料管理规程
- 深圳某旅游口岸施工组织设计
- GB∕T 25684.6-2021 土方机械 安全 第6部分:自卸车的要求
- 四川省职工住房补贴实施办法
评论
0/150
提交评论