Linux下的I/O操作

      Linux是基于文件来管理系统,包括I/O设备文件。Linux操作系统中有两类主要的设备,一类是字符设备,另一类是块设备。

     字符设备是以字节为单位进行I/O操作的设备。一般来说字符设备中的缓存是可有可无的,而且也不支持随机访问。

    块设备是利用一块系统内存作为缓冲区。


1、不带缓冲的设备文件I/O操作(基于文件描述符)




2、带缓冲的设备文件I/O操作(基于流)

  •          三种缓冲类型:全缓冲:如磁盘操作

                            行缓冲:在输入和输出遇换行符时才进行实际的I/O操作,如stdin 、stdout

                            无缓冲:如stderr

                  

  •             打开流、关闭流

          FILE * fopen(const char * path, const char *mode);//失败返回NULL

          FILE * fdopen(int fd, const char * mode);  //失败返回NULL

          FILE * freopen(const char *path, const char * mode, FILE * stream);//失败返回NULL

           int      fclose(FILE * stream);  //成功返回0,失败返回EOF(-1)



       注:调用fopen()其实就是为设备文件分配一个设备文件的信息区(FILE结构体) 和 缓冲区 的内存空间,返回一 个  内存空间的指针,若分配失败返回NULL

             调用fclose关闭一个设备文件,其实就是释放之前分配的信息区和缓冲区,是fp不再指向那块内存区
            fclose先将缓冲区中的信息输出到设备文件,才撤销文件信息区




  •          读取、写入一个字符

         int  fgetc(FILE *stream);  //从设备文件中读取一个字符,,,失败返回EOF

         int  fputc(int c, FILE * stream);  //向设备文件写入一个字符,,,失败返回EOF

     

         它的特殊化

          int  getchar(void);   //从特殊的设备文件(键盘)中读取一个字符

          int  putchar(int c);   //向特殊的设备文件(显示器)写入一个字符


  •          读取、写入一行字符

          char * fgets(char *s, int n, FILE * stream); //从设备文件中最多读取n-1个字符放到s,失败返回NULL

          int   fputs(const char *s, FILE * stream);  //向设备文件写入字符串s,失败返回EOF


        它的特殊化

         int  puts(const char * s);  //向特殊设备文件(显示器)写入字符串s,再多输出个换行,失败返回EOF



  •          按指定格式读写设备文件(通常来处理二进制文件)

         size_t   fread/fwrite(void * ptr,                 //存放读取/写入记录的ptr

                                        size_t size,              //读取/写入的记录的大小

                                        size_t nmemb,        //读取/写入的记录数

                                        FILE * stream);       //要读取/写入的设备文件



  •       刷新流

       强制刷新一个流,是该流所有未写的缓冲区数据写入到实际的设备文件中

         int fflush(FILE * stream);       //成功返回0,失败返回-1



  •      设备文件的定位  (成功返回0,失败返回-1)

       fseek/rewind可以改变流的读写位置,ftell返回一个流的当前读/写位置

      void  rewind(FILE *stream);  //使位置指针重新指向设备文件的开始

      int   fseek(FILE * stream, long offset,  int whence); //以起始点whence为基准移动offset的字节数

      long ftell(FILE *stream);   //返回一个设备文件的当前读/写位置

         

         

        

                              

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值