【c++初阶】系统文件操作

一.c语言文件操作引入

首先我们知道c语言内部有文件操作符,例如fopen,fwrite等函数都是我们熟知的由c语言提供的函数。其实这些函数是把系统接口重新封装了一下。fopen->open,fwrite>write。c语言的重新封装让我们能更为容易的使用这些接口。

二.简单熟悉一下系统接口

1.open:

这里我们可以看到调用open 的头文件,以及open所需要的参数,跟fopen相比明显要复杂许多。这里所说的open的大意是给定文件的路径名,open()会返回一个文件描述符,一个小的非负整数,用于后续的系统调用。成功调用返回的文件描述符将是当前进程未打开的编号最低的文件描述符。

2.close

 

大意是 Close 关闭一个文件描述符,这样它就不再引用任何文件,Close()成功返回0。出现错误时,返回-1。

 三,从c语言接口到系统接口

我们在使用c语言接口的是时候都会用一个FILE*来接受文件操作函数的返回值。这个FILE*其实是指向一个名为files_struct 结构体的指针。这个FILE*其实是进程控制块内部所包含的成员,也就是task_struct内部的成员。files_struct结构体是用来描述和管理要使用的文件的数据和属性的。一个进程对应一个files_struct。

四.文件描述符(fd)

通过上文我们知道了文件描述表的存在,那么文件描述符也就是fd究竟在哪呢。我们知道了files_struct里面有文件的属性和数据。同时也有指向文件结构体的指针,file*. 这个指针就是文件描述符。当一个进程打开很多文件的时候,每个文件都拥有自己的文件描述符。是一个file类型的结构体,它包含了这个文件要用的所有信息。他们之间通过双向链表来连接。而调用的时候,fd本质上就是按照数组下标的方式来调用的。所以标准输入是0,标准输出是1,标准错误是2。这三个文件是进程默认打开的,所以后序打开的文件描述符就是从3开始。

五.重定向

当我们手动close掉1的时候,我们再打开的文件的描述符就是1,fd默认是没有使用的最小整数。这个时候如果我们再调用printf的时候就会发现你要打印的文件没有打印到屏幕上,而是打印到文件内部。常见的重定向有 > >> <。还有一种常见的重定向方式dup2。

六.dup2

 

 dup2的作用就是newfd指向的文件结构体改到oldfd.最后根据情况可以关掉原来的newfd。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值