文件IO及其函数

一、文件IO

文件IO的函数是由操作系统提供的,与操作系统绑定的,又称之为系统调用

文件IO是不带缓冲区的

文件IO是通过文件描述符来维护一个文件

1. 文件描述符

  1. 标准IO对文件的读写是通过流指针实现的。

  2. 文件IO对文件的读写是通过文件描述符实现的。

  3. 尝试打开一个文件的时候,系统会自动给这个文件分配一个编号(文件描述符),用这个编号来描述这个文件。

  4. 标准IO就是对文件IO的二次封装,在文件IO的基础上封装了一个缓冲区,同时会将文件描述符一起封装到FILE结构体中。

  5. 文件描述符的本质就是数组下标,该数组由系统定义,通过文件描述符可以找到指定的文件。

2. 特殊的文件描述符

特殊的流指针 特殊的文件描述符 数值 对应的宏
stdin stdin->_fileno 0 STDIN_FILENO
stdout stdout->_fileno 1 STDOUT_FILENO
stderr stderr->_fileno 2 STDERR_FILENO

3. 文件描述符总量

文件描述符的编号:[0, 1023]。总量是1024个。

其中0,1,2分别对应,stdin stdout stderr;

注意:

每一个进程能打开的文件个数是有限的,在不使用的情况下,需要关闭。

getdtablesize()函数

功能:获取当前进程能打开的文件描述符总量;
头文件:
       #include <unistd.h>
       int getdtablesize(void);

二、常见的文件IO函数

1.常见的文件IO函数

open / close
read / write
lseek

2. 文件IO的使用

1)open

功能:打开一个文件,并返回文件描述符;
头文件:
       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>
原型:
       int open(const char *pathname, int flags);
       int open(const char *pathname, int flags, mode_t mode);
参数:
    char *pathname:指定要打开的文件路径+文件名;
    int flags:文件的打开方式
        O_RDONLY     只读
        O_WRONLY     只写
        O_RDWR         读写
      ---以上三种必须包含一种---
        O_CREAT     如果文件不存在则创建一个普通文件
        O_TRUNC     文件存在则清空文件
        O_APPEND     追加的方式写;

    w:O_WRONLY|O_TRUNC|O_CREAT;
        
    mode_t mode:设置创建文件时候的文件权限,例如:0664 0775 0777,如果O_CREAT选项不存在,则忽略该参数;

返回值:
    成功,返回文件描述符;
    失败,返回-1,更新errno; 

例子:
    int fd = open("./open.txt", O_WRONLY|O_CREAT|O_TRUNC, 0664);

          ┌─────────────┬───────────────────────────────┐
          │           fopen() mode │ open() flags                  │
          ├─────────────┼───────────────────────────────┤
          │     r                           │ O_RDONLY                      │
          ├─────────────┼───────────────────────────────┤
          │     w                          │ O_WRONLY | O_CREAT | O_TRUNC  │
          ├─────────────┼───────────────────────────────┤
          │     a                          │ O_WRONLY | O_CREAT | O_APPEND │
          ├─────────────┼───────────────────────────────┤
          │     r+                         │ O_RDWR                        │
          ├─────────────┼───────────────────────────────┤
          │     w+                        │ O_RDWR | O_CREAT | O_TRUNC    │
          ├─────────────┼───────────────────────────────┤
          │     a+                        │ O_RDWR | O_CREAT | O_APPEND   │
          └─────────────┴───────────────────────────────┘

2)umask

1.什么是umask

   文件权限掩码,会影响文件创建时候的权限;

2.umask的值

$ umask 结果是0002

3. 设置umask的值

方式1:在终端上设置,只在当前终端有效

$ umask 0 //将umask清零

方式2:通过umask()函数设置;

       #include <sys/types.h>
       #include <sys/stat.h>
       mode_t umask(mode_t mask);
      //将umask清空
       umask(0);  

3)close

功能:关闭文件;
头文件:
       #include <unistd.h>
原型:
       int close(int fd);
参数:
    int fd:指定要关闭的文件描述符;
返回值:
    成功,返回0;
    失败,返回-1,更新errno;

4)write

功能:将数据写入到文件中;
头文件:
       #include <unistd.h>
原型:
       ssize_t write(int fd, const void *buf, size_t count);
参数:
    int fd:文件描述符;
    void *buf:指定要输出的数据首地址;注意可以是任意类型指针;
    size_t count:指定要输出的数据大小,以字节为单位;
返回值ÿ

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值