精华内容
下载资源
问答
  • 如若没有正确使用fclose函数,会怎样
    2021-05-18 12:01:15

    如果没有正确使用fclose函数,会怎样?

    一个很老的帖子

    关于文件打开后写入数据未关闭而再次打开再次写入数据的问题

    想问一下,上面那个帖子中二楼给出的几个测试程序,是如何工作的?

    代码1

    my_file = fopen("11.txt", "w");

    fprintf(my_file,"start!\n");

    //fclose(my_file);//在此处不关闭文件

    my_file = fopen("11.txt", "a");

    fprintf(my_file,"my file\n");

    fclose(my_file);

    代码2

    my_file = fopen("11.txt", "w");

    fprintf(my_file,"start!\n");

    fclose(my_file);//在此处不关闭文件

    my_file = fopen("11.txt", "a");

    fprintf(my_file,"my file\n");

    //fclose(my_file);

    代码3

    my_file = fopen("11.txt", "w");

    fprintf(my_file,"start!\n");

    //fclose(my_file);//在此处不关闭文件

    my_file = fopen("11.txt", "a");

    fprintf(my_file,"my file\n");

    //fclose(my_file);

    代码4

    my_file = fopen("11.txt", "a");//此处也已追加方式

    fprintf(my_file,"start!\n");

    //fclose(my_file);//在此处不关闭文件

    my_file = fopen("11.txt", "a");

    fprintf(my_file,"my file\n");

    fclose(my_file);

    fclose

    文件操作

    分享到:

    ------解决方案--------------------

    打开文件和关闭文件都是比较耗时的。

    如果可以不关闭也没有多大关系的!

    只要你在下次对文件进行操作的时候注意文件流句柄的位置就好,

    防止覆写或者读到空白数据就好!

    ------解决方案--------------------

    我认为:不确定。

    1. 是否可以同时多次fopen一个文件取决于操作系统,而不是C语言。

    2. 缓冲机制和与对应文件关联的设备有关:全缓冲,无缓冲,行缓冲,缓冲的大小。

    你可以研究某个平台是如何实现的,但是不可以把结论推广到其他平台。

    ------解决方案--------------------

    fopen函数打开一个文件,操作系统会分配文件描述符和I/O缓存,还有其他的一些东西,而fclose函数会关闭该文件描述符,并释放内存,所以,如果一个服务器程序不关闭打开的文件,会造成内存泄漏(此处先借用这个词语),还有会因为操作系统因没有文件描述符可用而不能继续打开文件

    楼主最好去看下FILE这个结构体类型中的实际内容,有助于了解文件IO的一些事情

    更多相关内容
  • C语言freopen()函数:打开文件函数,并获得文件句柄 头文件: #include 定义函数: FILE * freopen(const char * path, const char * mode, FILE * stream); 函数说明: 参数 path 字符串包含欲打开的文件路径...
  • PHP fclose函数用法总结

    2021-01-02 16:44:17
    fclose(file) 参数: file 必需。规定要关闭的文件。 说明:如果成功则返回 true,否则返回 false。文件指针必须有效,并且是通过 fopen() 或 fsockopen() 成功打开的。 php fclose()函数 示例 <...
  • php file_put_contents()功能函数(集成了fopen、fwrite、fclose) ,需要的朋友可以参考下。
  • fopen_fclose.c

    2021-02-17 00:32:06
    fopen_fclose.c
  • fclose_fclose –关闭流

    2020-07-28 17:31:12
    fclosefclose is a frequently used C standard library which closes the file associated with ... fclose是一个常用的C标准库,它关闭与流关联的文件并取消关联。 名称 (NAME) fclose – close a stream fclo...

    fclose

    fclose is a frequently used C standard library which closes the file associated with the stream and disassociates it.

    fclose是一个常用的C标准库,它关闭与关联的文件并取消关联。

    名称 (NAME)

    fclose – close a stream

    fclose –关闭流

    概要 (SYNOPSIS)

    #include <stdio.h>
    int fclose(FILE *fp);

    描述 (DESCRIPTION)

    The fclose() function will flushes the stream pointed to by fp (writing any buffered output data using fflush()) and closes the underlying file descriptor.

    fclose()函数将刷新fp指向的流(使用fflush()写入任何缓冲的输出数据)并关闭基础文件描述符。

    返回值 (RETURN VALUE)

    Upon successful completion 0 is returned.  Otherwise, EOF is returned and errno is set to indicate the error.  In either  case any further access (including another call to fclose()) to the stream results in undefined behaviour.

    成功完成后,将返回0。 否则,将返回EOF并将errno设置为指示错误 。 在任何一种情况下,对该流的任何进一步访问(包括对fclose()的另一个调用)都会导致未定义的行为。

    错误 (ERRORS)

    EBADF  The file descriptor underlying fp is not valid.

    EBADF fp底层的文件描述符无效。

    The fclose() function may also fail and set errno for any of the errors  specified  for  the  routines  close(),
    write() or fflush().

    fclose()函数也可能会失败,并为例程close()指定的任何错误设置errno,
    write()或fflush()。

    符合 (CONFORMING TO)

    C89, C99.

    C89,C99。

    笔记 (NOTES)

    Note  that  fclose()  only  flushes the user space buffers provided by the C library.  To ensure that the data is physically stored on disk the kernel buffers must be flushed too, for example, with sync() or fsync().

    请注意,fclose()仅刷新C库提供的用户空间缓冲区。 为了确保将数据物理存储在磁盘上,内核缓冲区也必须进行刷新,例如,使用sync()或fsync()。

    From Linux Programmer’s Manual

    摘自Linux程序员手册

    (EXAMPLE)

    #include <stdio.h>
    int main(int argc, char* args[])
    {
      FILE * fp;
      pFile = fopen ("file_to_write.txt","wt");
      fprintf (fp, "fclose example");
      fclose (fp);
      return 0;
    }

    翻译自: https://www.systutorials.com/fclose-close-a-stream/

    fclose

    展开全文
  • C 库函数 - fclose()函数

    2021-05-22 06:10:30
    【函数所需头文件】:头文件:#include【函数声明】:int fclose(FILE *stream);【参数】:stream为文件流指针。【返回值】:若关文件动作成功则返回0,有错误发生时则返回EOF,并把错误代码存到errno。【函数描述】:C ...

    【函数所需头文件】:

    头文件:#include

    【函数声明】:

    int fclose(FILE *stream);

    【参数】:

    stream为文件流指针。

    【返回值】:

    若关文件动作成功则返回0,有错误发生时则返回EOF,并把错误代码存到errno。

    【函数描述】:

    C 库函数 int fclose(FILE *stream) 关闭流 stream。刷新所有的缓冲区。

    fclose()用来关闭fopen()打开的文件,此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。

    【注意点】:

    1、使用fopen()打开的文件,一定要记得使用fclose()关闭,否则会出现很多意想不到的情况,例如对文件的更改没有被记录到磁盘上,其他进程无法存取该文件等。

    2、stream文件流介绍:

    文件无非就是一段数据的集合,这些数据可以是有规则的集合,也可以是无序的集合。操作系统也就是以文件为单位对数据进行管理的。也就是说,要访问外部介质上的数据,必须先按照文件名进行查找,然后从该文件中读取数据。要想写数据到外部介质,必须得建立一个文件,然后再写入。因此,这样来看,你眼前的文件将是一堆一堆数据而已,也没有什么类型文件之分了,类型只是为了区分而已。

    再来看二进制文件和ASCII文本文件:首先、文本文件方式存储多用于我们需要明显知道文件里面的内容时,比如ini、h、c等文件都是文本文件,这种文件存储的是字符(ASCII码),比如一个整数10000,类型是short,占2字节,存储文本形式将占用5个字节,一共5个字符。你可以想想更多的例子,体会文本文件方便之处(提示:这里的文本文件不是说是txt文件,而是指所有以文本格式存储的文件。);其次、二进制文件方式多用于直接将内存里面的数据形式原封不动存放到文件里,比如上面的short 10000,在内存中占2字节,存储内容为10000的二进制数,存到文件后还是占2字节,内容也是10000的二进制。这种方式可以整块数据一块儿存储,同时还可以将内存数据映射到文件里。

    C语言就是使用上述两种方式进行操作文件的,文件可以是字节流或者二进制流。它把数据看成是一连串字符(字节),而不需要考虑边界。C语言对文件的存取是以字节为单位的。输入输出的数据流的开始和结束仅受程序控制而不受物理符号(如回车换行符)控制。这种文件通常称为流式文件,大大增加了灵活性。

    在ANSI C标准中,使用的是“缓冲文件系统”。所谓缓冲文件系统指系统自动地在内存区为每一个正在使用的文件名开辟一个缓冲区,从内存向磁盘输出数据必须先送到内存中的缓冲区,装满后再一起送到磁盘去。反向也是如此。这里需要说明两个词:“输入”“输出”。输入表示从文件里读数据到程序里,输出表示从程序里写数据到文件中。

    【举例】打开文件并关闭。

    #include

    int main(void)

    {

    FILE *pf;

    pf = fopen("file.in", "w+"); /*打开文件*/

    if(pf != NULL)

    {

    printf("open file ok\n");

    }

    else

    {

    printf("open file error\n");

    }

    fclose(pf);

    return 0;

    }

    程序首先打开文件file.in,然后根据fopen函数的返回值判断是否打开成功并给出提示信息,再调用函数fclose()关闭文件。

    展开全文
  • if(fclose(p)!=0) printf("文件关闭失败!"); else printf("文件关闭成功!"); } else printf("创建文件失败!\n"); getch(); break; case 'b': //打开文件 printf("打开文件成功\n"); getch(); break; case 'c':...

    a1.c:

    void main()

    {

    char selrun;

    FILE *p;

    do

    {

    system("cls");

    printf("请选择操作:\na:进行文件操作;\nb:进行记录操作;\n\

    c:进行预测评估;\nd:显示查询;\ne:退出程序。\n请选择:");

    fflush(stdin);

    //selrun=getchar();

    scanf("%c",&selrun);

    switch(selrun)

    {

    case 'a':   //文件操作

    p=filesel();   //vc6.0引用外部函数可不做声明?

    break;

    case 'b':    //记录操作

    break;

    case 'c':    //预测评估

    break;

    case 'd':    //显示查询

    break;

    case 'e':    //退出程序

    printf("谢谢使用,再见!\n");

    exit(SUCCESS);

    default:

    {

    printf("选择无效,请重新选择:\n");

    }

    }

    }

    while(1);

    }

    a2.c:

    #include

    #include

    FILE * filesel()

    {

    char selrun,filename[20];

    FILE *p=NULL;

    do

    {

    system("cls");

    printf("请选择操作:\na:创建新文件;\nb:打开一个文件;\n\

    c:删除一个文件;\nd:返回上级。\n请选择:");

    selrun=getch();

    fflush(stdin);

    switch(selrun)

    {

    case 'a':   //文件创建

    printf("请输入文件名:\n");

    gets(filename);

    if(p=fopen(filename,"ab")!=NULL)

    {

    printf("创建文件成功!\n");

    if(fclose(p)!=0)

    printf("文件关闭失败!");

    else

    printf("文件关闭成功!");

    }

    else

    printf("创建文件失败!\n");

    getch();

    break;

    case 'b':    //打开文件

    printf("打开文件成功\n");

    getch();

    break;

    case 'c':    //删除文件

    printf("删除文件成功\n");

    getch();

    break;

    case 'd':    //返加上级操作

    return p;

    default:

    {

    printf("选择无效,请重新选择:\n");

    }

    }

    }

    while(1);

    }

    这是源代码所有内容了.

    展开全文
  • fclose函数

    2020-04-01 19:02:51
    int fclose( FILE *stream ); 函数参数 stream:这是指向 FILE 对象的指针,该 FILE 对象指定了要被关闭的流。 函数返回值 如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。 代码举例 #include <stdio.h>...
  • } } 问题是我的应用程序在下一行从第一个染色体到第二个染色体(从chr1到chr2 )退出分段错误,在那里我关闭了我打开的第一个染色体文件: fclose(merbaseIn); 我知道我没有传递fclose一个NULL指针,因为直到...
  • fclose()是与文件流相关的函数.在fopen()的帮助下打开文件并将流分配给FILE * ptr.然后,您将使用fclose()关闭打开的文件.close()是与文件描述符相关的函数.在open()的帮助下打开文件并将描述符赋值给int fd.然后,您...
  • linux系统下,发现使用fopen打开文件失败后,会出现段错误的情况。
  • 注意:文件在使用后,必须调用fclose函数关闭这个文件,否则会出现文件损坏等问题 下面是一个打开使用文件的正确逻辑: 1.打开文件 2.使用文件 3.关闭文件 #include <stdio.h> int main () { //1.打开...
  • 那如果fopen多个文件之后,并不进行fclose会不会造成内存当中产生很多的这样的结构体,造成内存泄漏呢?做一个实验验证一下。 打开1个文件: #include int main() { FILE* fp; int i; for(i=0;i;i++) { fp = fopen(...
  • 文本文件关闭,fclose函数3.文件打开关闭的注意事项总结 1. 什么是文件? 磁盘上的文件是文件。 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件 1.程序文件 包括源程序文件(后缀为.c),目标文件...
  • 源码解析glibc中的pclose与fclose函数

    千次阅读 2019-01-22 23:10:05
    文章目录pclose 和 fclose 的阻塞问题测试代码问题pclose与fclose的关系fclose函数的定义pclose函数的定义总结fclose中的block有嫌疑的地方初识文件指针popen与fopen的魔术fopen的实现popen的实现总结 glibc源码...
  • fclose函数的作用

    千次阅读 2021-01-15 19:32:36
    我们知道fclose(FILE *)可以关闭文件流,但是我们偶尔也会发现似乎不加也没有什么问题.那我们还加他干嘛,那不浪费感情么(开玩笑,别当真,怕被打) 一.清空相关的缓冲区 以写文件为例,程序会先将文本信息存入缓冲区中,...
  • 我在PTA上面做了一道老师布置的多文件编程题目,我打开文件后没有使用fclose关闭文件,会不会导致不断读取文件,导致PTA后台的机器内存占满(今天上课PTA的后台炸了),我有点心虚,问一下各位大佬
  • fclose的manpage里有提示 NOTES Note that fclose() flushes only the user-space buffers provided by the C library. To ensure that the data is physically stored on disk the kernel buffers must be flushed ...
  • 文件读写完后fclose()就内存溢出linux环境下编译的#include#includetypedefstruct{char*CardCode;char*Name;char*Contact;char*Password;charAccountType;doubleMoneyCount;}*AccountRecord,AccountInfo;...
  • 本文给大家详细介绍了下C语言的文件操作函数fopen, fclose, mkdir的用法及示例,非常的简单实用,有需要的小伙伴可以参考下。
  • Matlab中fclose函数使用

    千次阅读 2020-12-17 09:55:06
    fclose函数关闭一个或所有打开的文件。 语法 fclose(fileID) fclose('all') status = fclose(___) 说明 fclose(fileID)关闭打开的文件。 fclose('all')关闭所有打开的文件。 当关闭操作成功时,status = ...
  • 2、fclose()函数 调用 fclose()库函数可以关闭一个由 fopen() 打开的文件。 #include int fclose(FILE *stream); 参数 stream 为 FILE 类型指针,调用成功返回 0 ;失败将返回 EOF (也就是 -1 ),并且会设置 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 180,869
精华内容 72,347
关键字:

fclose

友情链接: matpower7.0.zip