Linux程序设计四文件操作与文件管理PPT课件_第1页
Linux程序设计四文件操作与文件管理PPT课件_第2页
Linux程序设计四文件操作与文件管理PPT课件_第3页
Linux程序设计四文件操作与文件管理PPT课件_第4页
Linux程序设计四文件操作与文件管理PPT课件_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章文件操作与文件管理 1 基本要求 掌握Linux文件系统的实现 系统调用和标准I O库 文件属性目录的实现和操作 系统数据文件 文件锁 高级I O 2 Linux平台下文件编程 在Linux平台下对文件编程可以使用两类函数 Linux操作系统文件API C语言I O库函数 前者依赖于Linux系统调用 后者实际上与操作系统是独立的 因为在任何操作系统下 使用C语言I O库函数操作文件的方法都是相同的 3 Linux文件API 创建 创建intcreate constchar filename mode tmode 参数mode指定新建文件的存取权限 它同umask一起决定文件的最终权限 mode该调用将umask设置为newmask 然后返回旧的umask 它只影响读 写和执行权限 4 Linux文件API 创建 mode可以是以下情况的组合 可以通过上述宏进行 或 逻辑产生标志 5 Linux文件API 创建 mode可以是以下情况的组合 可以通过上述宏进行 或 逻辑产生标志 6 Linux文件API 创建 用数字来表示 Linux总共用5个数字来表示文件的各种权限 第一位表示设置用户ID 第二位表示设置组ID 第三位表示用户自己的权限位 第四位表示组的权限 最后一位表示其他人的权限 每个数字可以取1 执行权限 2 写权限 4 读权限 0 无 或者是这些值的和 7 Linux文件API 创建 用数字来表示 例如 要创建一个用户可读 可写 可执行 但是组没有权限 其他人可以读 可以执行的文件 并设置用户ID位 应该使用的模式是1 设置用户ID 0 不设置组ID 7 1 2 4 读 写 执行 0 没有权限 5 1 4 读 执行 即10705 8 Linux文件API 打开 打开intopen constchar pathname intflags intopen constchar pathname intflags mode tmode 如果文件打开成功 open函数会返回一个文件描述符 以后对该文件的所有操作就可以通过对这个文件描述符进行操作来实现 open函数有两个形式 其中pathname是要打开的文件名 包含路径名称 缺省是认为在当前路径下面 9 Linux文件API 打开 打开flags可以是下面的一个值或者是几个值的组合 O RDONLY O WRONLY O RDWR三个标志只能使用任意的一个 10 Linux文件API 打开 打开如果使用了O CREATE标志 则使用的函数是intopen constchar pathname intflags mode tmode 这时要指定mode标志 用来表示文件的访问权限 以O CREAT为标志的open实际上实现了文件创建的功能 例如 open test O CREAT 10705 open test O CREAT S IRWXU S IROTH S IXOTH S ISUID 11 Linux文件API 读写 读写Linux中提供文件读写的系统调用是read write函数 intread intfd constvoid buf size tlength intwrite intfd constvoid buf size tlength 参数buf为指向缓冲区的指针 length为缓冲区的大小 以字节为单位 12 Linux文件API 读写 intread intfd constvoid buf size tlength 函数read实现从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中 返回值为实际读取的字节数 intwrite intfd constvoid buf size tlength 函数write实现将把length个字节从buf指向的缓冲区中写到文件描述符fd所指向的文件中 返回值为实际写入的字节数 13 Linux文件API 定位 定位 对于随机文件 我们可以随机的指定位置读写 使用如下函数进行定位 intlseek intfd offset toffset intwhence lseek 将文件读写指针相对whence移动offset个字节 操作成功时 返回文件指针相对于文件头的位置 参数whence可使用下述值 SEEK SET 相对文件开头SEEK CUR 相对文件读写指针的当前位置SEEK END 相对文件末尾 14 Linux文件API 定位 定位 offset可取负值 例如下述调用可将文件指针相对当前位置向前移动5个字节 lseek fd 5 SEEK CUR 由于lseek函数的返回值为文件指针相对于文件头的位置 因此下列调用的返回值就是文件的长度 lseek fd 0 SEEK END 15 Linux文件API 关闭 关闭当操作完成以后 要关闭文件 只要调用close即可 其中fd是要关闭的文件描述符 intclose intfd 16 Linux文件API 编程实例 例程 编写一个程序 在当前目录下创建用户可读写文件 hello txt 在其中写入 Hello softwareweekly 关闭该文件 再次打开该文件 读取其中的内容并输出在屏幕上 17 Linux文件API 编程实例 include 类型 include 获取文件属性 include 文件描述词操作 include defineLENGTH100main intfd len charstr LENGTH fd open hello txt O CREAT O RDWR S IRUSR S IWUSR 创建并打开文件 以读写的方式打开 用户可以读 用户可以写 if fd write fd Hello SoftwareWeekly strlen Hello softwareweekly 写入Hello softwareweekly字符串 close fd fd open hello txt O RDWR 以读写方式打开len read fd str LENGTH 读取文件内容 str len 0 printf s n str close fd 18 Linux文件API 编程实例 编译并运行 执行结果如下 root dlroot gcc g ohello hello c root dlroot helloHello softwareweekly 19 C语言库函数 C库函数的文件操作实际上是独立于具体的操作系统平台的 不管是在DOS Windows Linux中都是这些函数 20 C语言库函数 创建和打开 创建和打开FILE fopen constchar path constchar mode fopen 实现打开指定文件 参数path字符串包含欲打开的文件路径及文件名 mode为打开模式 返回值 文件指针名 必须被说明为FILE类型的指针变量 21 C语言库函数 创建和打开 C语言中支持的打开模式如下表 其中b用于区分二进制文件和文本文件 在DOS Windows系统中是有区分的 但Linux不区分二进制文件和文本文件 22 C语言库函数 读写 读写 C库函数支持以字符 字符串等为单位 支持按照某种格式进行文件的读写 这一组函数为 intfgetc FILE stream 从流中读一个字符intfputc intc FILE stream 送一个字符到流中char fgets char s intn FILE stream 从流中读取一字符串intfputs constchar s FILE stream 送一个字符串到流中 23 C语言库函数 读写 intfprintf FILE stream constchar format 传送格式化输出到一个文件中 成功时返回转换的字节数 失败时返回一个负数 fprintf stream s c s c fprintf stream d n i intfscanf FILE stream constchar format 从一个流中执行格式化输入if fscanf stdin d 24 C语言库函数 读写 读写 size tfread void ptr size tsize size tn FILE stream size tfwrite constvoid ptr size tsize size tn FILE stream fread 实现从流stream中读取n个字段 每个字段为size字节 并将读取的字段放入ptr所指的字符数组中 返回实际已读取的字段数 write 实现从缓冲区ptr所指的数组中把n个字段写到流stream中 每个字段长为size个字节 返回实际写入的字段数 25 C语言库函数 定位 定位 C库函数还提供了读写过程中的定位能力 这些函数包括 intfgetpos FILE stream fpos t pos 将文件流的文件位置指示符存储在pos变量中intfsetpos FILE stream constfpos t pos 将文件指针定位在pos指定的位置上返回值 成功返回0 否则返回非0 26 C语言库函数 定位实例 includevoidmain void FILE fp fpos tpos charbuffer 50 if fp fopen test txt rb NULL 以只读方式打开名为test txt的文件 printf Troubleopeningfile n else pos 10 设置pos值 if fsetpos fp else 从新定位的文件指针开始读取16个字符到buffer缓冲区 fread buffer sizeof char 16 fp printf 16bytesatbyte ld 16s n pos buffer 显示结果 fclose fp 27 C语言库函数 定位实例说明 首先 程序以只读方式打开名为test txt的文件 在这里 test txt文件中已存入字符串Thisisatestfortestingthefunctionoffsetpos 将pos设置为10 应用fsetpos函数将文件指针fp按照pos指定的位置在文件中定位 这样文件指针fp指向字符串中test的字母t 再从新定位的文件指针开始读取16个字符到buffer缓冲区 也就是说读取字符串 testfortesting 到缓冲区buffer 最后显示结果 16bytesatbyte10 testfortesting 28 C语言库函数 定位 intfseek FILE stream longoffset intwhence stream为文件指针offset为偏移量 整数表示正向偏移 负数为负向偏移whence设定从文件的哪里开始偏移 可能取值为 SEEK SET 文件开头0SEEK CUR 当前位置1SEEK END 文件结尾2fseek fp 100L 0 把fp指针移动到离文件开头100字节处 fseek fp 100L 1 把fp指针移动到离文件当前位置100字节处 fseek fp 100L 2 把fp指针退回到离文件结尾100字节处 29 C语言库函数 关闭 关闭 利用C库函数关闭文件的操作 intfclose FILE stream 30 目录操作 新建目录操作可使用函数mkdir 实现 该函数的一般形式是 mkdir 路径 umask 当目录被成功创建函数的返回值为0 否则为 1 获得当前工作目录的操作可使用函数getcwd 该函数的一般形式是 getcwd char buf size tsize 其中 buf是存放当前目录的缓冲区 size是缓冲区的大小 如果函数返回当前目录的字符串长度超过size规定的大小 它将返回NULL 31 目录操作 执行程序的工作目录就是当前子目录 如果要改变执行程序的工作目录 可以使用函数chdir 这个函数的作用如同shell里的cd命令一样 它的一般形式是 chdir 路径 另一个常用目录操作是扫描子目录 与此相关的函数被封装在头文件dirent h里 它们使用一个名为DIR的结构作为子目录处理的基础 这个结构的指针所指向的内存空间被称之为子目录流 与子目录流操作相关的函数如表所示 32 删除目录或文件操作 删除目录操作可使用函数rmdir 完成 该函数的一般形式是 rmdir 路径 该函数必须是在该目录下没有子

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论