linux高级编程之IO操作(西红柿种子.三)

一、标准IO与文件IO的对比

                库函数                系统调用(文件IO)
                fopen/fclose            open/close
                fgetc/fputc               read/write
                fgets/fputs
                fread/fwrite
                fseek                        lseek 

标准IO
    1.有缓存的IO形式(程序缓存区满与内核进行数据交互)
    2.标准是库函数
    3.实时性差多用于操作普通文件
    4.移植性好,可以用在Linux、Windows系统中
    
文件IO
    1.没有缓存的IO形式(程序可以随时与内核进行数据交互)
    2.文件IO是系统调用
    3.实时性好多用于设备文件操作
    4.移植性差,只能用在Linux系统中
    
系统调用:    Linux内核中的函数接口
   库函数:    是对系统调用的封装

二、承接上一期分享,接着来看函数接口

        1.open
          int open(const char *pathname, int flags);
          int open(const char *pathname, int flags, mode_t mode);
          功能:            打开一个文件
          参数:
            pathname:打开文件的路径
            flags:
                O_RDONLY        只读
                O_WRONLY        只写
                O_RDWR            读写
                O_APPEND        追加
                O_CREAT            文件不存在创建
                O_ASYNC            异步IO
                O_NONBLOCK        非阻塞IO
                O_TRUNC            文件存在清0 
            mode:创建文件的权限
                rwx rwx rwx         rw- rw- r--
                421 421 421      0 6   6   4                   
          返回值:
                    成功返回新文件描述符
                    失败返回-1

插入知识点:     
    文件描述符:
        内核每打开一个文件,会获得操作该文件的文件描述符
        特点:
            (1)非负整数(0 1 2 3 4 ..)
                stdin -> 0
                stdout-> 1
                stderr-> 2
            (2)新创建的文件描述符的值总为尚未被使用的最小的非负整数
            (3)操作系统默认允许打开的文件描述符范围为(0-1023)            
    "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

2.close
  int close(int fd);
     功能:关闭文件描述符
      参数:    文件描述符
  返回值:
                    成功返回0
                    失败返回-1     
3.read/write
  ssize_t write(int fd, const void *buf, size_t count);
  功能:    向文件描述符中写入数据
  参数:
    fd:文件描述符
    buf:写入数据空间首地址
    count:写入数据的个数
  返回值:
    成功返回实际写入字节数
    失败返回-1 
  注意:ssize_t类型就是有符号的整型,其实就是换了一种名称而已

  ssize_t read(int fd, void *buf, size_t count);
  功能:    从文件描述符中读取数据
  参数:
    fd:文件描述符 
    buf:存放读取数据空间首地址
    count:读取字节数
  返回值:
    成功返回实际读取的字节数
    失败返回-1 
    读到文件末尾返回0 

4.lseek
  off_t lseek(int fd, off_t offset, int whence);
  功能:    设定文件描述符的偏移量
  参数:
    fd:文件描述符 
    offset:偏移量
    whence:
        SEEK_SET        文件开头
        SEEK_CUR        当前位置
        SEEK_END        文件末尾
  返回值:
    成功返回当前位置的偏移量
    失败返回-1 
  注意:off_t类型其实就是long int类型;

本期的知识点分享就到这里结束了,这也是博主在自学过程中整理的笔记,其中有自己一些见解,希望可以帮到小伙伴们,欢迎评论区留言哦!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值