精华内容
下载资源
问答
  • //文件结构体FILE的理解以及缓冲区再讲#include#include//要点:文件结构//struct _iobuf {// char *_ptr; ------当前缓冲区内容指针// int _cnt; ------缓冲区还有多少字符// char *_base; ------缓冲区的起始地址/...

    //文件结构体FILE的理解以及缓冲区再讲

    #include

    #include

    //要点:文件结构

    //struct _iobuf {

    // char *_ptr; ------当前缓冲区内容指针

    // int _cnt; ------缓冲区还有多少字符

    // char *_base; ------缓冲区的起始地址

    // int _flag; ------文件流的状态,是否错误或结束

    // int _file; -----文件描述符

    // int _charbuf; -----双字节缓冲,缓冲2个字节

    // int _bufsiz; -----缓冲区大小

    // char *_tmpfname; -----临时文件名

    //};

    //typedef struct _iobuf FILE;

    void main(){

    // stdin是键盘文件指针

    char ch;

    printf("缓冲区的有效数据是%d\n", stdin->_cnt);

    printf("指向缓冲区的指针%x\n", stdin->_ptr);

    printf("缓冲区的起始地址%x\n", stdin->_base);

    printf("缓冲区的大小%d\n", stdin->_bufsiz);

    printf("文件标识符%d\n", stdin->_file);

    printf("------------\n");

    ch = getchar();

    printf("当前获取的字符是%c\n", ch);

    printf("缓冲区的有效数据是%d\n", stdin->_cnt);

    printf("指向缓冲区的指针%x\n", stdin->_ptr);

    printf("缓冲区的起始地址%x\n", stdin->_base);

    printf("缓冲区的大小%d\n", stdin->_bufsiz);

    printf("文件标识符%d\n", stdin->_file);

    //键盘输出123456

    //打印结果:

    //当前获取的字符是1

    //注:getchar()只能获取一个字符,并且将缓冲区内容指针向后移动一个字节(这里ch是char,所以是1个字节,int就会是4个字节)

    //缓冲区的有效数据是6

    //注:这里对缓冲区的有效数据是6作解释,现在缓冲区内实际字符是7个(1,2,3,4,5,6,回车符)

    //因为此时缓冲区内容指针向后移动一个字节,所有有效的就剩下6个

    //指向缓冲区的指针f56c701

    //注:这里ch是char类型,所以缓冲区内容指针向后移动一个字节

    //缓冲区的起始地址f56c700

    //缓冲区的大小4096

    //文件标识符0

    printf("------------\n");

    ch = getchar();

    printf("当前获取的字符是%c\n", ch);

    printf("缓冲区的有效数据是%d\n", stdin->_cnt);

    printf("指向缓冲区的指针%x\n", stdin->_ptr);

    printf("缓冲区的起始地址%x\n", stdin->_base);

    printf("缓冲区的大小%d\n", stdin->_bufsiz);

    printf("文件标识符%d\n", stdin->_file);

    printf("------------\n");

    fflush(stdin);

    //fflush()函数的作用是有效数据清零,指针回到起始地址

    //扩展:

    //函数名: fflush

    //功 能 : 清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入时

    //头文件:stdio.h

    //原型 : int fflush(FILE *stream)

    //fflush()函数与stdin->_cnt = 0;stdin->_ptr = stdin->_base;代码等价

    /*stdin->_cnt = 0;

    stdin->_ptr = stdin->_base;*/

    //rewind(stdin);

    //函数名: rewind()

    //功 能 : 将文件内部的位置指针重新指向一个流(数据流 / 文件)的开头

    //注意:不是文件指针而是文件内部的位置指针,随着对文件的读写文件的位置指针(指向当前读写字节)向后移动。而文件指针是指向整个文件,如果不重新赋值文件指针不会改变。

    //rewind函数作用等同于(void)fseek(stream, 0L, SEEK_SET); [1]

    //用 法 : void rewind(FILE *stream);

    //头文件: stdio.h

    //rewind()比fflush()功能更加复杂,rewind()会对文件指针和文件位置指针进行操作,而fflush()主要指针文件位置指针进行操作

    printf("当前获取的字符是%c\n", ch);

    printf("缓冲区的有效数据是%d\n", stdin->_cnt);

    printf("指向缓冲区的指针%x\n", stdin->_ptr);

    printf("缓冲区的起始地址%x\n", stdin->_base);

    printf("缓冲区的大小%d\n", stdin->_bufsiz);

    printf("文件标识符%d\n", stdin->_file);

    //打印结果:

    //当前获取的字符是2

    //注:ch是个变量,在内存上有实际地址,清空的只是stdin的缓存,不会影响ch变量

    //缓冲区的有效数据是0

    //指向缓冲区的指针f56c700

    //缓冲区的起始地址f56c700

    //缓冲区的大小4096

    //文件标识符0

    system("pause");

    }

    cb99ed3671622f572f0ba7a92ff030d0.png

    C语言文件操作 FILE结构体

    内存中的数据都是暂时的,当程序结束时,它们都将丢失.为了永久性的保存大量的数据,C语言提供了对文件的操作. 1.文件和流 C将每个文件简单地作为顺序字节流(如下图).每个文件用文件结束符结束,或者在特 ...

    c语言_文件操作_FILE结构体解释_涉及对操作系统文件FCB操作的解释_

    1. 文件和流的关系 C将每个文件简单地作为顺序字节流(如下图).每个文件用文件结束符结束,或者在特定字节数的地方结束,这个特定的字节数可以存储在系统维护的管理数据结构中.当打开文件时,就建立了和文件 ...

    c语言文件操作函数详解

    一.文件操作注意点: 1 打开文件时,如果打开方式加“+”,表示该文件可以“写” ; 2 退出程序一般用exit函数,正常退出参数为0,非正常退出参数为正零值 ; 3 文件的读写操作:按字符.字符串. ...

    【转】C语言文件操作解析(三)

    原文网址:http://www.cnblogs.com/dolphin0520/archive/2011/10/07/2200454.html C语言文件操作解析(三) 在前面已经讨论了文件打开操作, ...

    关于C语言文件操作

    关于C语言的文件操作之前我也写过一篇博客来介绍,但是当时写的很不全面,只是简单的使用了一下 ,今天再从新学习一下. 1.文件的写 首先还是先看一个简单的例子: include

    go语言文件操作,这期资料比较详细( 欢迎加入go语言群: 218160862 )

    go语言文件操作,这期资料比较详细 欢迎加入go语言群: go语言深圳群 golang深圳 218160862 点击加入 文件操作 func Open(name string) (file *File ...

    C语言文件操作

    C语言文件操作,以下以基本的例子和说明来展开怎么通过C语言来进行文件操作. 操作文件,我们得需要知道什么?当然是路径和文件名. 首先我需要知道我操作的文件在哪里,叫什么名字.在C语言中还存在一个打开方 ...

    C 语言文件操作

    C 语言文件操作 1. 数据流:     程序与数据的交互以流的形式进行.fopen 即打开数据流,fclose 即刷新数据流.     所谓数据流,是一种抽象,表示这段数据像流一样,需要逐步接收,不 ...

    C语言文件操作函数

    C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include 定义函数 void clearerr(FILE * str ...

    随机推荐

    iOS Unicode和汉字互转

    //unicode转中文 NSString* strA = [@"%E4%B8%AD%E5%9B%BD"stringByReplacingPercentEscapesUsingEn ...

    ASP.NET MVC:窗体身份验证及角色权限管理示例

    ASP.NET MVC 建立 ASP.NET 基础之上,很多 ASP.NET 的特性(如窗体身份验证.成员资格)在 MVC 中可以直接使用.本文旨在提供可参考的代码,不会涉及这方面太多理论的知识. 本 ...

    android 动态改变listview的内容

    本文模拟:点击一个按钮,为已有的listview添加一行数据 <?xml version="1.0" encoding="utf-8"?> < ...

    Nginx出现&OpenCurlyDoubleQuote;413 Request Entity Too Large”错误解决方法

    Nginx出现“413 Request Entity Too Large”错误解决方法 2011-03-25 13:49:55|  分类: 默认分类 |  标签:413  request  entit ...

    javascript高级知识分析——上下文

    如果函数是一个对象的属性,那么它可以? var katana = { isSharp: true, use: function(){ this.isSharp = !this.isSharp; } } ...

    Cordova 使用经验

    1. 需要下载ant,ant需要的文件: build.xml <?xml version="1.0" ?>

    展开全文
  • linux系统的缓冲区大小一般默认为4092bit,。对于文件写入时,缓冲区刷新情况分为以下几种1.当读取的文件是普通文件的时候,所有文件缓冲区的刷新方式只有全缓冲全缓冲:当写入缓冲区中的数据,达到了缓冲区的极限值...

    在C语言中所有文件写入的数据,不会立即写入,而是先写入到缓冲区中,等到一定条件之后才会由缓冲区写入到文件中去。

    linux系统的缓冲区大小一般默认为4092bit,。

    对于文件写入时,缓冲区刷新情况分为以下几种

    1.当读取的文件是普通文件的时候,所有文件缓冲区的刷新方式只有全缓冲

    全缓冲:当写入缓冲区中的数据,达到了缓冲区的极限值后,系统就会自动将缓冲区中的数据写入至文件中。

    2.当读取的文件是特殊设备文件的时候,例如键盘文件、显示器文件等,此时文件缓冲区的刷新方式会同时支持全缓冲以及行(’\n')缓冲。

    行缓冲:当写入特殊设备文件的数据中包含了换行符的时候,即使缓冲区未满,系统也会自动刷新缓冲区并且将数据写入文件中。

    3.strerr文件的写入,只支持无缓冲方式刷新缓冲区

    无缓冲:没有缓冲区,直接将缓冲区中的数据写入错误文件中。

    其他情况下,缓冲区中的数据也有可能被写入文件中并刷新缓冲区。

    a.文件关闭的时候,系统会将缓冲区中的数据写入到文件中。

    b.程序执行完毕并且没有调用文件关闭函数fclose的时候,系统会将未关闭的文件关闭,并且清空缓冲区,将程序的资源释放。

    c.调用fflush函数的时候,程序会直接将缓冲区中的数据写入文件中,并且清空缓冲区。

    d.printf 之后如果数据还在缓冲区,在调用scanf 会自动把数据刷写到stdout文件中

    展开全文
  • C语言缓冲区

    2016-12-13 16:51:24
    linux系统的缓冲区大小一般默认为4092bit,。 对于文件写入时,缓冲区刷新情况分为以下几种 1.当读取的文件是普通文件的时候,所有文件缓冲区的刷新方式只有全缓冲 全缓冲:当写入缓冲区中的数据,达到了缓冲区的极限...

    在C语言中所有文件写入的数据,不会立即写入,而是先写入到缓冲区中,等到一定条件之后才会由缓冲区写入到文件中去。

    linux系统的缓冲区大小一般默认为4092bit,。

    对于文件写入时,缓冲区刷新情况分为以下几种

       1.当读取的文件是普通文件的时候,所有文件缓冲区的刷新方式只有全缓冲

             全缓冲:当写入缓冲区中的数据,达到了缓冲区的极限值后,系统就会自动将缓冲区中的数据写入至文件中。

        2.当读取的文件是特殊设备文件的时候,例如键盘文件、显示器文件等,此时文件缓冲区的刷新方式会同时支持全缓冲以及行(’\n')缓冲。

             行缓冲:当写入特殊设备文件的数据中包含了换行符的时候,即使缓冲区未满,系统也会自动刷新缓冲区并且将数据写入文件中。

        3.strerr文件的写入,只支持无缓冲方式刷新缓冲区

             无缓冲:没有缓冲区,直接将缓冲区中的数据写入错误文件中。

    其他情况下,缓冲区中的数据也有可能被写入文件中并刷新缓冲区。

       a.文件关闭的时候,系统会将缓冲区中的数据写入到文件中。

       b.程序执行完毕并且没有调用文件关闭函数fclose的时候,系统会将未关闭的文件关闭,并且清空缓冲区,将程序的资源释放。

       c.调用fflush函数的时候,程序会直接将缓冲区中的数据写入文件中,并且清空缓冲区。

       d.printf 之后如果数据还在缓冲区,在调用scanf 会自动把数据刷写到stdout文件中

    展开全文
  • C语言 队列缓冲区

    千次阅读 2017-11-27 08:54:38
    此方式使用到了单向链表,写的时候实时分配空间,读了之后....C文件/********************************************************************** * Copyright (c), 2012~2016 XiShanTec All Rights Reserved * @file

    此方式使用到了单向链表,写的时候实时分配空间,读了之后释放空间,代码还有不足之处,比如说未加锁机制。

    .C文件

    /**********************************************************************
     * Copyright (c), 2012~2016 All Rights Reserved
     * @file        
     * @brief 
     * @author      
     * @date        2016/05/23
     * @version     1.0.0
     * @par Revision History:
     *  Date            Author               Notes
     *  2015/5/23       wangzhenghui         file created           
     ********************************************************************/
    #include "ring_buffer.h"
    #include "string.h"
    
    /********************************************************************
    **  Function Name : ring_buffer_init
    **  Description   : NONE
    **  Input para    : NONE
    **  Output para   : NONE
    **  Return Value  : NONE
    **  Version       : V0.1
    **  Author        : wangzhenghui
    *******************************************************************/
    void buffer_queue_init(struct buffer_queue_t *queue,unsigned short max_size)
    {
      queue->max_size = max_size;
      queue->p_head = NULL;
      queue->p_last = NULL;
    }
    /********************************************************************
    **  Function Name : buffer_queue_write
    **  Description   : 填充队列
    **  Input para    : 
    **  Output para   : NONE
    **  Return Value  : NONE
    **  Version       : V0.1
    **  Author        : wangzhenghui
    *******************************************************************/
    unsigned short buffer_queue_write(struct buffer_queue_t *queue,unsigned char *psrc,unsigned short wr_len)
    {
        struct buffer_packet_t *packet = (struct buffer_packet_t *)malloc(sizeof(struct buffer_packet_t));
    
    
        if(queue->p_last == NULL)
        {
            queue->p_head = packet;
        }
        else
        {
            queue->p_last->next = packet;
        }
        queue->p_last = packet;
    
       if(queue->size >= queue->max_size)
       {
           return 0;
       }
       packet->buffer_ptr = (unsigned char *)malloc(sizeof(unsigned char)*wr_len);
    
       memcpy(packet->buffer_ptr,psrc,wr_len);
       packet->buffer_size = wr_len;
       packet->next = NULL;
       queue->size += packet->buffer_size;
    
       return wr_len;
    }
    /********************************************************************
    **  Function Name : buffer_queue_read
    **  Description   : 从队列中读出数据
    **  Input para    : 
    **  Output para   : NONE
    **  Return Value  : NONE
    **  Version       : V0.1
    **  Author        : wangzhenghui
    *******************************************************************/
    unsigned short buffer_queue_read(struct buffer_queue_t *queue,unsigned char *pdest,unsigned short *rd_len)
    {
        struct buffer_packet_t *packet;
    
        packet = queue->p_head;
        if(packet)
        {
            queue->p_head = queue->p_head->next;
            if(queue->p_head == NULL)
            {
                queue->p_last = NULL;
            }
            memcpy(pdest,packet->buffer_ptr,packet->buffer_size);
            queue->size -= packet->buffer_size;
            *rd_len = packet->buffer_size;
            free(packet->buffer_ptr);
            free(packet);
        }
        else
        {
            *rd_len = 0;
        }
    
       return *rd_len;
    }
    
    .h文件

    /**********************************************************************
     * Copyright (c), 2012~2016 xxx All Rights Reserved
     * @file        
     * @brief 
     * @author      
     * @date        2016/05/23
     * @version     1.0.0
     * @par Revision History:
     *  Date            Author               Notes
     *  2015/5/23       wangzhenghui         file created           
     ********************************************************************/
    #ifndef _BUFFER_QUEUE_H_
    #define _BUFFER_QUEUE_H_
    #ifdef __cplusplus
    extern "C"
    {
    #endif // __cplusplus
    
    #undef NULL
    #if defined(__cplusplus)
    #define NULL 0
    #else
    #define NULL ((void *)0)
    #endif
    
    struct buffer_packet_t
    {
        unsigned char           *buffer_ptr;
        unsigned short           buffer_size;
        struct buffer_packet_t  *next;
    };
    
    struct buffer_queue_t
    {
        struct buffer_packet_t   *p_head,*p_last;
        unsigned short   max_size;
        unsigned short   size;
    };
    /********************************************************************
    **  Function Name : buffer_queue_init
    **  Description   : NONE
    **  Input para    : NONE
    **  Output para   : NONE
    **  Return Value  : NONE
    **  Version       : V0.1
    **  Author        : wangzhenghui
    *******************************************************************/
    extern void buffer_queue_init(struct buffer_queue_t *p_queue,unsigned short size);
    /********************************************************************
    **  Function Name : buffer_queue_write
    **  Description   : NONE
    **  Input para    : NONE
    **  Output para   : NONE
    **  Return Value  : NONE
    **  Version       : V0.1
    **  Author        : wangzhenghui
    *******************************************************************/
    extern unsigned short buffer_queue_write(struct buffer_queue_t *p_queue,unsigned char *p_dest,unsigned short rd_len);
    
    /********************************************************************
    **  Function Name : buffer_queue_read
    **  Description   : NONE
    **  Input para    : NONE
    **  Output para   : NONE
    **  Return Value  : NONE
    **  Version       : V0.1
    **  Author        : wangzhenghui
    *******************************************************************/
    extern unsigned short buffer_queue_read(struct buffer_queue_t *rb,unsigned char *pdest,unsigned short *rd_len);
    
    #ifdef __cplusplus
    } // extern "C"
    #endif // __cplusplus
    #endif //_BUFFER_QUEUE_H_
    


    展开全文
  • c语言缓冲区的理解

    万次阅读 多人点赞 2017-04-16 18:49:05
    从一个简单的例子开始: [cpp] view plain ...C语言 中对缓冲区的概念。...在这之前我们初步分析一下,scanf函数输入字符串的的情况下空白字符(空格,回车,Tab)...那么快可以知道缓冲区大小为4k。
  • C语言缓冲区

    2020-02-27 14:39:18
    C语言缓冲区  在编写C语言的交互式程序时,在和程序进行交互的过程中,不知不觉地用使用到了缓冲区的概念。下面来了解一下C语言缓冲区。 为什么要有缓冲区  首先,把若干字符作为一个块传输比逐个发送字符节省...
  • 文件在写入时,先保存数据到缓冲区,当使用fflush(fp)刷新缓冲区或使用fclose(fp)关闭文件时,数据才写入文件,或者在缓冲区内存满时将早先的数据写入文件,不同平台缓冲区大小有所区别。 验证缓冲区 #define _CRT_...
  • C语言缓冲区

    2019-04-28 13:17:34
    如果我们没有自己设置缓冲区的话,系统会默认为标准输入输出设置一个缓冲区,这个缓冲区大小通常是4096个字节的大小,这和计算机中的分页机制有关,因为进程在计算机中分配内存使用的就是分页与分段的机制,并且每...
  • 对于读操作来说,直到读入的内容的字节数等于缓冲区大小或者文件已经到达结尾,才进行实际的I/O操作,将缓冲区内容读入程序中;对于写操作来说,直到缓冲区被填满,才进行实际的I/O操作,缓冲区内容写到外存文件中。...
  • 1.全缓冲:当缓冲区满时就会被自动刷新(不同系统的缓冲区大小不同,Windows的好像是4KB) 2.行缓冲:举例getchar()函数,当程序调用getchar()函数时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中...
  • C语言文件读写操作中缓冲区问题和setbuf函数详解
  • C语言:缓冲区及字符串的输入与输出

    千次阅读 2019-12-30 22:19:02
    一、缓冲区 概念 系统为了加快程序运行的速度预留出来的、暂时置放输出或输入资料的一块内存空间 为什么需要缓冲区 程序运行时,在CPU中控制单元控制下,计算机从磁盘中读取对应的数据。但是与内存相比,磁盘...
  • 文件的概念 所谓文件,是指存储在外部介质上的数据集合,是一批逻辑上有联系的数据。这个数据集有一个名称,教授作文件名。 文件的种类 文本文件:所有数据都...缓冲区是在打开文件时分配的,每当打开一个文件,系...
  • 从磁盘向内存读入数据时,则一次从磁盘文件将一些数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送给接收变量;向磁盘文件输出数据时,先将数据送到内存中的缓冲区,装满缓冲区后才一起送到磁盘
  • 从磁盘向内存读入数据时,则一次从磁盘文件将一些数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送给接收变量;向磁盘文件输出数据时,先将数据送到内存中的缓冲区,装满缓冲区后才一起送到磁盘去...
  • 今天给大家分享,用字符生成简单对称图形 并把它写入到文件中,强制刷新文件缓冲区到磁盘文件中,再把它读出来,打印到屏幕中。 相关函数 fopen()——打开文件函数,第一个参数 文件路径,第二个参数 读取方式...
  • c语言文件操作

    千次阅读 多人点赞 2018-12-21 09:26:46
    C语言文件处理功能,大体上分为两种:一种是设置缓冲区,另一种是不设置缓冲区。因为不设置缓冲区的方法直接对磁盘进行操作,速度较慢,并且由于不是C的标准函数,跨平台操作时容易出问题。本文只介绍设置缓冲区的...
  • 文件类型分为:流文件和设备文件 设备文件比如:VGA接口,串口,usb口,网口,串口,这些接口都被操作系统抽象成为了文件。   当我们写程序的时候默认已经帮我们打开了三个文件 分别是:  stdin:标准输入 ...
  • C语言缓冲区(缓存)详解

    千次阅读 多人点赞 2015-07-26 10:59:00
    1.概念 缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的...比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取
  • 全缓冲:在这种情况下,当缓冲区被填满后才进行真正的输入输出操作,缓冲区大小都是有限制的,数据量达到最大值就清空缓冲区。 行缓冲:当在输入或输出的过程中遇到换行符时,才执行真正的输入输出操作。scanf()、...
  • C语言清空输入缓冲区

    千次阅读 多人点赞 2018-07-16 21:49:26
    C语言编程 - 清空键盘输入缓冲区  清空键盘缓冲区很多种方法,如用fflush(stdin); rewind(stdin);等,但是在linux这些都不起作用,还得我今天试了半天都没成功,上网搜了一下发现setbuf(stdin, NULL);就能直接...
  • 文件型结构体 ...要想对文件进行操作,系统需要很多控制信息,包括文件名,文件当前读写位置,缓冲区位置和大小等,为此,C语言提供了“文件型”结构来标示记录待操作文件的信息,该结构定义于...
  • socket缓冲区 每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送到目标机器。一旦将数据...
  • C语言缓冲区问题

    2018-06-27 18:30:04
    中预留指定大小的存储空间用来对I/O的数据做临时存储,这部分预留的内存空间叫缓冲区。 使用缓冲区有两个好处:  1、减少实际物理读写次数  2、缓冲区在创建时就被分配内存,这块内存区域一直被重用,可以减少动态...
  • //文件结构体FILE的理解以及缓冲区再讲 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; //要点:文件结构 //struct _iobuf { // char *_ptr; ------当前缓冲区内容指针 // int _cnt; ...
  • C语言中,用一个指针变量指向一个文件,这个指针称为文件指针。...注意:FILE是文件缓冲区的结构,fp也是指向文件缓冲区的指针。 不同编译器 stdio.h 头文件中对 FILE 的定义略有差异,这里以标准C举例说.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,454
精华内容 12,981
关键字:

c语言文件缓冲区大小

c语言 订阅