打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于fprintf与缓冲区的一点发现

先说结论:fprintf函数在默认情况下只有当缓冲区溢出或是程序自然停止时时才会输出数据到文件。

 而当程序中止(例ctrl+c)时,若缓冲区未满 缓冲区亦不会向目标输出流

不一定。 

fprintf 函数是将数据输出到流中,而不是立即输出到文件。如果使用标准输出(stdout)或者 stderr 的话,它通常会立即将流写入到终端输出。如果是用 fopen 函数打开一个文件,然后将文件指针传递给 fprintf 函数输出的话,则 fprintf 函数会先将数据存储在缓冲区中,直到缓冲区满或者使用 fflush 函数清空缓冲区时才会将数据写入到文件中。 

另外,如果是使用 fprintf 打开一个非常小的文件,并且向其中写入的数据非常少,可能在程序结束前都不会实际写入到文件中。因此,在关闭文件或程序结束之前,最好使用 fflush 函数将缓冲区的数据写入到文件中,以确保数据被成功写入文件。

如果 `fp` 是通过 `fopen` 函数以写入(w/w+)的方式打开的文件,那么此语句不会立即将流写入文件,而是会将数据存储在 `fp` 对应的文件缓冲区中,直到缓冲区满或者调用 `fflush` 或 `fclose` 函数,才会将缓冲区中的数据写入到磁盘文件中。 

但是,如果 `fp` 是通过 `fopen` 函数以追加 (a/a+) 的方式打开的文件,那么此语句会立即将流写入文件。在追加模式下,新的数据会被直接追加到文件末尾,因此不需要使用 `fflush` 或 `fclose` 函数来刷新缓冲区。

末尾加上 "\n",表示在输出内容的末尾添加换行符。如果 fp 是通过 fopen 函数以写入 (w/w+) 或追加 (a/a+) 方式打开的文件,那么在 fprintf 函数中,加上 "\n" 表示输出内容,并在内容末尾添加一个换行符。数据会被存储在 fp 对应的文件缓冲区中,直到缓冲区满了或缓冲区被手动清空(例如使用 fflush 函数)或关闭文件(使用 fclose 函数)时,才会将缓冲区中的数据写入到磁盘文件中。

但是,如果 fp 是一个标准输出流(如 stdout),那么在输出内容的同时,会将其立即刷新到终端,因此,在 fprintf 中,在数据的末尾加上 "\n" 可以立即在终端显示新的一行。

总之,如果要确保 fprintf 函数输出的数据及时地写入文件,可以手动调用 fflush 函数来刷新缓冲区。



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
<<轻松学会C语言>>20.系统调用(文件接口)
C语言文件输入输出操作
11月7日学习: printf fprintf fopen
Linux下应用开发基础
c语言中所有文件操作函数详解fopen、fwrite、fread、fgetc、fputc、fscanf、fprintf、ftell、fseek等函数
C语言文件操作(转载)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服