系统级I/O

UNIX I/O

一切皆文件是窦豆老师上课常说的一句话。
在UNIX中所有的内容都可以看成是文件,所有的输入和输出都被当做是文件的读和写,比如在UNIX中open()函数和close()函数是用来打开和关闭文件,read()和write()函数则是用来读写文件,一切的操作都与文件息息相关。接下来让我们分析几种关于UNIX文件操作的函数。

打开文件

在UNIX中打开文件的函数为open函数,open函数可以打开一个已存在的文件或者可以创建一个新的文件。
open函数在打开一个文件的同时会创建一个文件描述符,该文件描述符不是随便的取值,而是未使用的最小文件描述符,何为未使用的最小文件描述符?
在我们打开一个文件的时候,该文件会自动调用三个文件描述符分别为:

  • 标准输入函数:文件描述符为0
  • 标准输出函数:文件描述符为1
  • 标准错误函数:文件描述符为2
    这三个文件描述符是不管你打开的是什么文件都会创建的,所以去除掉这三个文件描述符,被打开的文件的最小文件描述符则为3。
    标准的open函数的主体是int open(char* filename,int flags,mode_t mode)
  • 其中filename为文件名,就是你要打开的文件的名称
  • flags为访问文件的方式,比如说只可读或者只可写
  • mode的作用则是设置文件的访问权限

flags参数有关的宏定义:

  • O_RDONLY:只读
  • O_WRONLY:只写
  • O_RDWR:可读可写
  • O_CREAT:如果文件不存在,则创造一个空文件,存在则继续打开
  • O_TRUNC:如果文件是存在的,那么则清空该文件
  • O_APPEND:在文件的末端开始进行操作(相当于是继续写该文件,其他方式则会进行覆盖)

mode参数:

  • S_IRUSR:使用者(拥有者)能够读这个文件
  • S_IWUSR:使用者(拥有者)能够写这个文件
  • S_IXUSR:使用者(拥有者)能够执行这个文件
  • S_IRGRP:拥有者所在组的成员能够读这个文件
  • S_IWGRP:拥有者所在组的成员能够写这个文件
  • S_IXGRP:拥有者所在组的成员能够执行这个文件
  • S_IROTH:其他人(任何人)能够读这个文件
  • S_IWOTH:其他人(任何人)能够写这个文件
  • S_IXOTH:其他人(任何人)能够执行这个文件
    这就是open函数的主要内容。

关闭文件

关闭文件所需要调用的函数是close函数int close(int fd)。fd为文件的描述符,如果该文件描述符并没有调用,则出现错误。

写文件

在UNIX中写文件是用的是write函数,该函数的整体为ssize_t write(int fd,const void *buf,size_t n)

  • 同理fd为文件描述符,指明要进行写操作的文件
  • 而buf的作用则是write函数从内存buf中复制字节到文件描述符为fd的文件中(buf可以看做是一个中间存储地址,我们从键盘中写入的数据并不是直接的放在文件中,而是有一个中间内存让我们过度这些数据)
  • n则为从buf中复制的字符个数

读文件

读文件所调用的函数为ssize_t read(int fd,void *buf,size_t n),该函数与write函数的区别在于buf部分,我们在write中是我们键盘的输入存储在其中,而在read中则是将文件中我们要读的数据辅助到该地址buf当中。

I/O 重定位

Linux shell提供了I/O重定位操作符,允许用户将磁盘文件和标准输入输出联系起来,该操作依靠int dup2(int oldfd,int newfd)。dup2函数的作用是复制描表表项oldfd到描述表表项newfd,覆盖描述表表项newfd以前的内容。
比如我们的系统在此时fd1对应的是文件A,fd4对应的是文件B,我们想让fd1不再对应文件A,想让它对应文件B。我们可以调用函数dup2(4,1)来实现该操作。
在这里插入图片描述
此时文件A因为无人调用所以文件A被关闭且它的文件表和v-node表表项也被删除。

只就是系统级I/O的部分介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值