五花八门客户问题(BUG) - 重复打印

根据commit猜测客户问题

git://sourceware.org / glibc.git / commitcommitsummary | shortlog | log | commit | commitdiff | tree
(parent: 4573c6b) | patch
Don't flush write buffer for ftell
author	Siddhesh Poyarekar <siddhesh@redhat.com>	
Fri, 28 Sep 2012 13:07:23 +0000 (18:37 +0530)
committer	Siddhesh Poyarekar <siddhesh@redhat.com>	
Fri, 28 Sep 2012 13:08:14 +0000 (18:38 +0530)
commit	adb26faefe47b7d34c941cbfc193ca7a5fde8e3f
tree	799a1e10dae3c9aac2b9c2c79e0b8adaaa1eae90	tree
parent	4573c6b09884a93fffa3a754678ef881cadebfb3	commit | diff
Don't flush write buffer for ftell

真实客户问题

客户发现打印到文件的内容重复了。这不是普通文件,我们是做数据库的,影响很大。

问题所在

大喜的是问题很好重现,所以直接debug吧。在所有的fwrite函数上下断点,愣是没看出来怎么重复的。后来才怀疑到fwrite+fork这项操作上。如下是一个简易版的重现代码。踩踩结果吧:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>void main(){FILE* file=fopen("test.txt", "a+");fwrite("First", 1, 5, file);fwrite("Secon", 1, 5, file);ftell(file); /*NOTE: redhat 6/AIX7  flushs the data, while centos 7 doesn't flush!!!!*///setbuf(file, 0);if(fork()>0){fwrite("In Parent", 1, 9, file);exit(0);}else{fclose(file);}
}

结果:FirstSeconIn ParentFirstSecon

相信读者应该已经注意到上面的注释了,与glibc中的ftell有关系,redhat6中ftell不会强刷缓冲中的数据到磁盘,但是redhat7却会,这是文章一开始的glibc的commit导致的。基础软件的一点点更新都是影响巨大啊。

fix办法

fix也很简单,只需要在fork之前调用下fflush即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/203397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ELK 日志解决方案

ELK 是目前最流行的集中式日志解决方案&#xff0c;提供了对日志收集、存储、展示等一站式的解决方案。 ELK 分别指 Elasticsearch、Logstash、Kibana。 Elasticsearch&#xff1a;分布式数据搜索引擎&#xff0c;基于 Apache Lucene 实现&#xff0c;可集群&#xff0c;提供…

B 站基于 StarRocks 构建大数据元仓

作者&#xff1a;bilibili 大数据高级开发工程师 杨洋 B站大数据元仓是一款用来观测大数据引擎运行情况、推动大作业治理的系统诊断产品。经过调研和性能测试&#xff0c;大数据元仓最终以 StarRocks 为技术底座&#xff0c;从实际的应用效果来看&#xff0c;大部分查询都能在几…

mvn site 命令

概述 在Maven中&#xff0c;site指的是一个特定的阶段&#xff0c;其目的是生成项目相关的站点文档。这些站点文档可以为项目的开发者、用户、以及其他利益相关者提供有关项目的详细信息。 Maven的站点文档通常包括以下内容&#xff1a; 项目信息&#xff1a;这部分提供了关于…

Mysql大数据量删除

Mysql大数据量删除 在一些操作中&#xff0c;可能需要清理一下积压的数据&#xff0c;如果数据量小的话自然没有问题&#xff0c;但是如果是个大数据量的问题&#xff0c;那么就该考虑一个合适的办法了。 在清理大数据量的时候需要考虑是清理部分数据还是清理所有数据&#xf…

【微服务】分布式限流如何实现

Sentinel 是一款阿里巴巴开源的分布式系统级流量控制组件&#xff0c;它提供了流量的自适应控制、熔断降级、系统负载保护等功能。下面是使用 Sentinel 实现分布式限流方案的基本步骤&#xff1a; 引入 Sentinel 依赖&#xff1a;首先在你的 Java 项目中引入 Sentinel 的相关依…

Stm32_串口的帧(不定长)数据接收

目录标题 前言1、串口中断接收固定帧头帧尾数据1.1、任务需求1.2、实现思路1.3、程序源码&#xff1a; 2、串口中断接收用定时器来判断帧结束3、串口中断接收数据空闲中断3.1、串口的空闲中断3.2、实现思路3.3、程序源码 4、串口的空闲中断DMA转运4.1、DMA简介4.2、DMA模式4.3、…

AHB 与 DMA

AHB&#xff08;先进高性能总线&#xff09; 随着深亚微米工艺技术日益成熟&#xff0c;集成电路芯片的规模越来越大。数字IC从基于时序驱动的设计方法&#xff0c;发展到基于IP核复用的设计方法&#xff0c;并在SOC设计中得到了广泛应用。在基于IP核复用的SoC&#xff08;Syst…

【BME2112】w11 notes

下周做老鼠实验 group analysis SPM group analysis 数据地址resting state 可以分析&#xff1a;correlation 计算两个脑区的相关性 静息态实验简单functional 成功的实验能看到激活区不成功的实验&#xff1a;比如被试头动太大&#xff0c;不是健康的被试 Spontaneous brain…

ThreeJs中使用Cannon实现方块自由落体效果

之前有做过小球的掉落效果&#xff0c;不过那个从画面上只能看出来重力加速度和接触地面反弹的效果&#xff0c;可能没有那么直观&#xff0c;也许用一些js加物理公式也能实现类似的效果&#xff0c;这节用小方块来演示&#xff0c;可以很直观的看出物理世界的现象&#xff0c;…

ALPHA开发板烧录工具MfgTool烧写方法

一. 简介 MfgTool 工具是 NXP 提供的专门用于给 I.MX 系列 CPU 烧写系统的软件&#xff0c;可以在 NXP 官网下载到。运行在windows下。可以烧写uboot.imx、zImage、dtb&#xff0c;rootfs。通过 USB口进行烧写。 上一篇文章简单了解了 ALPHA开发板烧录工具MfgTool。文章地址…

数据结构之交换排序

目录 交换排序 冒泡排序 冒泡排序的时间复杂度 快速排序 快速排序单趟排序的时间复杂度 快速排序的时间复杂度 交换排序 在日常生活中交换排序的使用场景是很多的&#xff0c;比如在学校做早操&#xff0c;老师通常会让学生按大小个排队&#xff0c;如果此时来了一个新学…

MySQL系列(一):索引篇

为什么是B树&#xff1f; 我们推导下&#xff0c;首先看下用哈希表做索引&#xff0c;是否可以满足需求。如果我们用哈希建了索引&#xff0c;那么对于如下这种SQL&#xff0c;通过哈希&#xff0c;可以快速检索出数据&#xff1a; select * from t_user_info where id1;但是这…

ThreadX开源助力Microsoft扩大应用范围:对比亚马逊AWS的策略差异

全球超过120亿台设备正在运行ThreadX&#xff0c;这是一款专为资源受限环境设计的实时操作系统。该操作系统在微控制器和小型处理器上表现出色&#xff0c;以极高的可靠性和精确的时间控制处理任务而闻名。 ThreadX曾是英特尔芯片管理引擎的引擎&#xff0c;并且是控制Raspber…

JavaScript 宿主对象

JavaScript 宿主对象 BOM window 全局对象 window对象是可以直接被访问到的每一个用var声明的变量都会自动作为window对象的属性存在 function声明的函数也会自动作为window对象的方法存在访问window对象的属性和方法可以不用写window 属性 innerWidth 获取浏览器窗口的宽度…

AWS基于x86 vs Graviton(ARM)的RDS MySQL性能对比

概述 这是一个系列。在前面&#xff0c;我们测试了阿里云经济版&#xff08;“ARM”&#xff09;与标准版的性能/价格对比&#xff1b;华为云x86规格与ARM&#xff08;鲲鹏增强&#xff09;版的性能/价格对比。现在&#xff0c;再来看看AWS的ARM版本的RDS情况 在2018年&#…

User: zhangflink is not allowed to impersonate zhangflink

使用hive2连接进行添加数据是报错&#xff1a; [08S01][1] Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. User: zhangflink is not allowed to impersonate zhangflink 有些文章说需要修…

配置OSS后如何将服务器已有文件上传至OSS,推荐使用ossutil使用

1.下载安装ossutil sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash2.交互式配置生成配置文件 ossutil config 根据提示分别设置配置文件路径、设置工具的语言、Endpoint、AccessKey ID、AccessKey Secret和STSToken参数&#xff0c;STSToken留…

自定义BeanPostProcessor之Feign组件服务间优雅调用

Feign是什么 feign是声明式的web service客户端&#xff0c;它让微服务之间的调用变得更简单了&#xff0c;类似controller调用service。Spring Cloud集成了Ribbon和Eureka&#xff0c;可在使用Feign时提供负载均衡的http客户端。 Feign怎么使用 FeignClient(value "s…

【Axure高保真原型】个性化自定义图片显示列表

今天和大家分享个性化自定义图片显示列表的原型模板&#xff0c;鼠标点击多选按钮&#xff0c;可以切换按钮选中或者取消选中&#xff0c;按钮选中时&#xff0c;对应图片会在列表中显示&#xff0c;按钮取消后&#xff0c;对应图片会自动隐藏。那这个模板是用中继器制作的&…

系统设计-缓存介绍

该图说明了我们在典型架构中缓存数据的位置。 沿着流程有多个层次。 客户端应用程序&#xff1a;HTTP 响应可以由浏览器缓存。我们第一次通过 HTTP 请求数据&#xff0c;返回时在 HTTP 标头中包含过期策略&#xff1b;我们再次请求数据&#xff0c;客户端应用程序首先尝试从浏…