IO进程(2)

文件IO

1.概念

在posix(可移植操作系统接口)中定义的一组输入输出的函数

2.特点

  1. 没有缓冲机制,每次操作都会经过系统调用,效率比较低
  2. 围绕文件描述符,文件描述符是非负整数,0、 1、 2
  3. 默认打开三个文件描述符,0(标准输入)、1(标准输出)、2(标准错误)
  4. 除目录外其他任意类型文件都可以操作

3.函数

man 3

​​​​​​​​​​​​​​3.1打开文件

#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags, ...);
功能:打开文件
参数:pathname:文件路径名
      flags:打开文件的方式
            O_RDONLY:只读
            O_WRONLY:只写
            O_RDWR:可读可写
            O_CREAT:创建
            O_TRUNC:清空
            O_APPEND:追加
返回值:成功:文件描述符
        失败:-1

示例:

第二个和参数存在O_CREAT我们就需要第三个参数你要创建文件权限

实际文件权限计算方式指定权限值 & (~umask)

补充:

  1. 当第二个参数中有O_CREAT选项时,需要给open函数传递第三个参数,指定创建文件的权限 ,open(file, xx|O_CREAT|xx, 0666);
  2. 实际创建出来的文件权限为:指定权限值&(~umask) //umask为文件权限掩码,通过umask命令可以查看
  3. 打开文件方式对应表

标准IO

文件IO

r

O_RDONLY

r+

O_RDWR

w

O_WRONLY|O_CREAT|O_TRUNC

w+

O_RDWR|O_CREAT|O_TRUNC

a

O_WRONLY|O_CREAT|O_APPEND

a+

O_RDWR|O_CREAT|O_APPEND

​​​​​​​​​​​​​​3.2关闭文件

int close(int fd);
参数:fd:文件描述符

示例

​​​​​​​3.3读写文件

read

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
功能:从一个已打开的可读文件中读取数据
参数:fd  文件描述符
     buf  存放位置
    count  期望的个数
返回值:成功:实际读到的个数
      返回-1:表示出错,并设置errno号
      返回0:表示读到文件结尾


示例

write

ssize_t write(int fd, const void *buf, size_t count);
功能:向指定文件描述符中,写入 count个字节的数据。
参数:fd   文件描述符
          buf   要写的内容
          count  期望值
返回值:成功:实际写入数据的个数
              失败  : -1


示例

补充:在读和写一起使用时,一般write的字符个数指定为read的返回值,“读多少写多少”

​​​​​​​​​​​​​​4.文件定位操作

#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
功能:设定文件的偏移位置
参数:fd:文件描述符
    offset偏移量  
        正数:向文件结尾位置移动
        负数:向文件开始位置
    whence  相对位置
        SEEK_SET   开始位置
        SEEK_CUR   当前位置
        SEEK_END   结尾位置
返回值:成功:文件的当前位置

示例

 5.重定向打开文件

FILE * freopen(const char *pathname,  const char *mode,  FILE* fp)
功能:将指定的文件流重定向到打开的文件中
参数:path:文件路径
mode:打开文件的方式(同fopen)
      fp:文件流指针
返回值:成功:返回文件流指针
      失败:NULL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值