IO——文件IO

1.1 概念

又称为系统IO,是系统调用,是操作系统提供的函数接口。
posix中定义的一组用于输入输出的函数。

1.2 特点

(1)没有缓冲机制,效率较低
(2)围绕文件标识符操作,非负整数,依次分配
(3) 文件IO默认打开了三个文件描述符,分别是0(标准输入)、1(标准输出)、2(标准错误)
(4) 操作除了目录(d类型)文件的任意其他类型文件:b c - l s p
(5)可移植性差

1.3 操作

1.3.1open()

int open(const char *pathname, int flags);
功能:打开文件
参数:pathname:文件路径名
     flags:打开文件的方式
            O_RDONLY:只读
            O_WRONLY:只写
            O_RDWR:可读可写
            O_CREAT:不存在创建
            O_TRUNC:存在清空
            O_APPEND:追加   
返回值:成功:文件描述符
       失败:-1
例如:O_WRONLY|O_CREAT|O_TRUNC  ==> "w" 可写,不能存在时创建,存在则清空
|表示或,因为O_WRONLY....这些命令是整形或之后形成新的整形表示不同命令(相当于具备这些命令功能新的命令)
当第二个参数中有O_CREAT选项时,需要给open函数传递第三个参数,指定创建文件的权限 
int open(const char *pathname, int flags, mode_t mode);
最后权限=创建出来的文件指定权限值&(~umask)  
例如:指定权限为06668进制)
最终权限为0666&(~umask) = 0666 & 0775 = 0664
umask:系统默认为0002所以转八进制为0775

文件IO和标准IO的打开方式的对应关系
在这里插入图片描述
注意:有O_CREAT的时候需要加第三个参数代表权限(没有生成的文件可能写入等功能无法实现)

1.3.2关闭文件close()

int close(int fd);
功能:关闭文件
参数:fd:文件描述符

1.3.2 读写文件read() write()

ssize_t read(int fd, void *buf, size_t count);
功能:从一个已打开的可读文件中读取数据
参数: fd  文件描述符
      buf  存放位置
      count  期望的个数
返回值:成功:实际读到的个数(小于期望值说明实际没这么多)
       返回0:表示读到文件结尾
       返回-1:表示出错,并设置errno号
       
ssize_twrite(int fd,const void*buf,size_t count);
功能:向指定文件描述符中,写入 count个字节的数据。
参数:fd   文件描述符
buf   要写的内容
count  期望写入字节数
返回值:成功:实际写入数据的个数
失败  : -1
//返回值小于期望值是错误行为,可能磁盘满了无法再写。

1.3.3文件定位lseek()

off_t lseek(int fd, off_t offset, int whence);
功能:设定文件的偏移位置
参数:fd:文件描述符
    offset: 偏移量  
        正数:向文件结尾位置移动
        负数:向文件开始位置
    whence: 相对位置
        SEEK_SET   开始位置
        SEEK_CUR   当前位置
        SEEK_END   结尾位置
补充:和fseek一样其中SEEK_SET,SEEK_CURSEEK_END和依次为012.

返回值:成功:文件的当前位置
        失败:-1

标准IO和文件IO总结
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值