Linux C/C++多进程同时写一个文件(一)

近期会写关于《#%#$#%@%@%$#%$#%#%#$%@_e206a54e97690c++e50cc872dd70ee896 c/c++多进程同时写一个文件》的系列文章,主要是探索在linux下非亲缘关系的多进程和具有亲缘关系的多进程同时写一个文件的问题。例如,当两个进程同时写一个文件,那么写入结果是怎样的呢?是否会出现数据丢失的情况?是否会出现覆盖?是否会出现错乱?

本文是这一系列文章的第一篇,通过两个非亲缘关系的进程演示同时写一个文件的情形,最终得出结论、回答上面的问题。

1 查看要写入的文件的inode信息

使用如下命令可以查看要写入的文件LINUX_MUTIL_PROCESS_WRITE对应的inode情况,可以看到它的值为67530247

代码语言:javascript代码运行次数:0运行复制

[vfhky@typecodes ~]$ stat /home/vfhky/src/linux/process/fork1/LINUX_MUTIL_PROCESS_WRITE   File: ‘/home/vfhky/src/linux/process/fork1/LINUX_MUTIL_PROCESS_WRITE’  Size: 1220608         Blocks: 2384       IO Block: 4096   regular fileDevice: 803h/2051d      Inode: 67530247    Links: 1Access: (0664/-rw-rw-r--)  Uid: ( 1000/   vfhky)   Gid: ( 1000/   vfhky)Access: 2017-10-28 12:00:32.935269018 +0800Modify: 2017-10-28 12:02:32.228412041 +0800Change: 2017-10-28 12:02:32.228412041 +0800 Birth: -[vfhky@typecodes ~]$

2 示例程序

下面这个linux_process_fork1_5.c程序很简单,主要是把p_buf指向的静态区数据写入到文件LINUX_MUTIL_PROCESS_WRITE中。

为了测试多进程同时写文件的情景,需要复制linux_process_fork1_5.c程序为linux_process_fork1_6.c,同时把p_buf指向改成abcdefghi,然后分别编译成两个不同的可执行文件:linux_process_fork1_5 和 linux_process_fork1_6。

立即学习“C++免费学习笔记(深入)”;

1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536

/** * @FileName linux_process_fork1_5.c * @Describe Linux C/C++多进程同时写一个文件(一) * @Author vfhky 2017-10-28 13:23 https://typecodes.com/cseries/linuxmutilprocesswrite1.html * @Compile gcc linux_process_fork1_5.c -o linux_process_fork1_5 */#include #include #include #define FILE_NAME “LINUX_MUTIL_PROCESS_WRITE”static const char *p_buf = “123456789”;int main( const int argc, const char * const *argv ){ //这里使用ab,其中a表示追加,它能原子性地保证进程对应的文件表项中的当前文件偏移量每一次都等于v节点表中当前文件长度。 FILE *fp = fopen( FILE_NAME, “ab” ); if( fp == NULL ) { printf( “Can not opent %s.n”, FILE_NAME ); return -1; } for( int i=0; i

3 开始测试

打开两个linux ssh终端,然后分别执行linux_process_fork1_5(对应进程pid为2910)、linux_process_fork1_6(对应进程pid为2910)。

Linux C/C++多进程同时写一个文件(一)执行两个测试程序

再打开一个ssh终端,使用lsof -p 2910命令查看两个进程打开的文件情况,从下图中可以看出这两个进程开打的都是同一个文件(对应的inode值为67530247)。

C知道 C知道

CSDN推出的一款AI技术问答工具

C知道 45 查看详情 C知道

Linux C/C++多进程同时写一个文件(一)lsof命令查看进程打开的文件

使用ll /proc/2910/fd命令查看两个进程表项中的所有文件描述符,都是标准输入0、标准输出1、标准错误输出2和打开的文件对应的描述符3。也就是说对于文件描述符3来说,这两个进程表项指向的文件表项中的v节点指针指向的是同一个v节点(包含i节点、文件长度等信息,且唯一)。

Linux C/C++多进程同时写一个文件(一)ll /proc/2910/fd命令查看进程表项中的文件描述符

使用strace -p 2910命令查看两个进程的内核调用情况,可以看到这两个进程由于for循环的缘故,一直在调用usleepfwrite函数,而这两个函数最终会调用内核的nanosleepwrite函数。

需要思考一点,为什么会函数write(3, "fghiabcdefghiabcdefghiabcdefghia"..., 4096) = 4096第2个参数不是程序中指定的abcdefghi而是4096个字节的字符。从这里可以延伸到writefwrite的区别,就不多说了。

Linux C/C++多进程同时写一个文件(一)ll /proc/2910/fd命令查看进程表项中的文件描述符

最后通过tail -f LINUX_MUTIL_PROCESS_WRITE命令查看文件写入情况,从下图两个红色标注可以看出linux_process_fork1_5进程写入的123456789在字符4后插入了linux_process_fork1_6进程写入的defg等数据。

Linux C/C++多进程同时写一个文件(一)tail -f命令查看文件写入情况

4 结论

从上面小节的测试过程可以发现,两个非亲缘关系的进程同时写一个文件时,会出现数据混乱的情况,但是两个进程写入的数据没有覆盖。

这是因为这两个进程表项中指向的对应的两个文件表项对应的当前文件偏移量是不一致的,但是由于打开文件时是使用append追加的方式,使得进程指向的文件表项中的当前文件偏移量都等于当前文件中所有数据的总长度。这就是为什么写入的数据会出现错乱,但是不会出现覆盖(偏移量不一致)的原因。

注意:内核write函数在写入时是原子操作,所以两个进程会有一个竞争关系,最终只会由某个进程写入数据。

5 附录

关于Linux C/C++多个亲缘关系的进程同时写同一个文件的分析请参考下一篇文章。

以上就是Linux C/C++多进程同时写一个文件(一)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/456712.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月8日 01:43:41
下一篇 2025年11月8日 01:44:33

相关推荐

  • Internet Computer(ICP)币是什么?如何运作?市场价格预测

    尽管加密货币市场整体遭遇显著回调,ICP币却展现出强劲的上涨势头,成为当前市场的焦点之一。数据显示,过去24小时内,ICP币价格上涨了13.1%,而在过去七天内更是实现了高达93.13%的惊人涨幅,几乎实现翻倍。目前,该代币市值已攀升至31.2亿美元,单日交易额激增至6.784亿美元,显示出市场参与…

    2025年12月9日
    000
  • 加密货币术语黑话大全:HODL, FUD, FOMO是什么意思

    踏入加密货币世界,您会频繁遇到一些独特的“黑话”。理解这些术语是新手融入社区的第一步,它们能帮您更好地把握市场情绪和投资动态。 HODL:坚定的信仰者 1、HODL实际上源于一个拼写错误,本意是“HOLD”(持有),但因其生动地表达了在市场波动中坚定持币的信念而被广泛流传下来。 2、这个词代表着一种…

    2025年12月9日
    000
  • 谁是中本聪?揭秘比特币创始人的十大神秘传说

    “中本聪”是比特币创始人的化名,其真实身份至今成谜。这位神秘人物在2008年发布了比特币白皮书,并于2009年创造了首个区块,随后便销声匿迹,留下了无数传说。 个人身份的几大猜想 1、多利安·中本(Dorian Nakamoto):一位日裔美国物理学家,因姓名巧合一度被认为是中本聪本人,但他公开否认…

    2025年12月9日
    000
  • 从Ping到PayAI,X402协议如何引领AI经济体新模式?

            在这个时代中,传统的计算和交互模式面临着新的挑战,而x402协议的出现,则为ai经济体构建了一种全新的、高效且安全的运作模式。它不仅仅是一个技术规范,更是一种理念的 ,旨在解决ai系统间协作、价值交换和资源分配等核心问题。 从最初简单的“Ping”响应,到复杂的“PayAI”服务,X…

    2025年12月9日
    000
  • 免费查看币圈行情网站推荐_十大虚拟货币行情查询平台

    对于任何加密货币投资者来说,实时、准确的行情数据是做出明智决策的基础。本文将为您盘点十大免费且功能强大的虚拟货币行情查询平台,帮助您轻松掌握市场动态,从海量数据中发现价值。 1. 币安 (Binance) 作为全球领先的加密货币交易所,币安不仅提供交易服务,其网站和App内嵌的行情中心本身就是极佳的…

    2025年12月9日
    000
  • 虚拟币机构持仓怎么看 虚拟币机构持仓数量怎么看

    binance币安交易所 Binance币安注册入口: Binance币安APP下载: 欧易OKX交易所 欧易(OKX)注册入口: 欧易(OKX)注册APP下载: 火币HTX交易所: 注册入口: APP下载: 了解机构投资者的持仓动向,是洞察市场趋势和信心的重要窗口。对于普通投资者而言,掌握这些关键…

    2025年12月9日
    000
  • 十大交易所排行榜最新_2025全球十大数字货币交易所排名

    币安:交易量最大、币种最全,产品覆盖现货至理财;2. 欧易:衍生品强势,Web3账户成桥梁;3. 火币(HTX):历史悠久,亚洲影响力强;4. Gate.io:山寨币丰富,上新快;5. Coinbase:合规标杆,法币友好;6. Kraken:安全可靠,欧洲份额高;7. KuCoin:新兴项目多,社…

    2025年12月9日
    000
  • 币圈免费看行情网站合集_十大免费加密货币行情平台推荐

    对于加密货币投资者而言,实时、准确的行情数据是做出明智决策的基础。本文为您精选了十大顶级的免费加密货币行情平台,无论您是新手还是资深交易员,都能在这些网站上找到所需的市场信息、图表工具和深度数据,从而有效把握市场脉搏。 十大免费加密货币行情平台 1. 币安 (Binance) 作为全球领先的加密货币…

    2025年12月9日
    000
  • 人工智能如何颠覆加密交易?详解3款AI交易机器人

    人工智能(ai)正以前所未有的方式重塑加密货币交易领域。ai技术通过强大的数据分析和自动化能力,为交易者提供了更高效、更智能的决策工具,彻底改变了传统交易模式。 AI如何重塑加密货币交易格局 1、人工智能能够实时处理和分析海量的市场数据,包括价格波动、交易量和历史图表。它能识别出人类难以察觉的复杂模…

    2025年12月9日
    000
  • Wormhole (W) 币是什么?跨链桥龙头项目的空投与价值分析

    主流币交易平台推荐: 欧易OKX: Binance币安: 火币Huobi: Gateio芝麻开门: Wormhole是领先的跨链消息传递协议,旨在连接不同区块链,实现资产和数据的无缝流转。其原生代币W的空投引发市场广泛关注,巩固了其作为跨链桥龙头项目的地位。 Wormhole (W) 核心价值 1、…

    2025年12月9日
    000
  • Pyth Network (PYTH) 是什么?预言机新星挑战Chainlink的底气何在?

    pyth network是一个新兴的去中心化预言机项目,旨在为区块链应用提供高保真、高频率的金融市场数据。它凭借独特的运行机制和强大的数据源,正迅速成为行业巨头chainlink的有力挑战者。 Pyth Network的核心机制是什么? 1、Pyth Network的核心是其首创的第一方数据源模式。…

    2025年12月9日
    000
  • Saga (SAGA) 币是什么?模块化游戏公链的空投与潜力解读

    saga是一个专注于游戏领域的模块化layer 1协议,它通过独特的“chainlet”架构,让开发者能轻松启动专用的并行链,极大地降低了web3游戏开发的门槛。 Saga的核心技术与特色 1、其核心是“Chainlet”无限扩展架构,开发者可以按需启动独立的、可互操作的专用链,从而彻底摆脱网络拥堵…

    2025年12月9日
    000
  • 币圈最新行情分析软件推荐 币圈实时行情分析APP大全

    想看懂币圈行情,选对工具是第一步。市面上的软件各有侧重,关键看你是想快速查价格、做深度技术分析,还是追踪市场情绪。下面这几个是2025年大家用得最多、口碑最好的选择,根据你的需求来挑就行。 交易所内置工具:看盘交易一体化 如果你主要在某个平台交易,那直接用它的App看行情是最方便的,省去了切换的麻烦…

    2025年12月9日
    000
  • 币圈行情分析软件十大排行榜单2026年

    1、欧易okx 欧易okx官网入口: 欧易okxAPP下载链接: 2、币安Binance 币安Binance官网入口: 币安BinanceAPP下载链接: 3、火币HTX 官网入口: APP下载链接: 4、大门Gate.io 官网入口: 官方APP下载链接: 在快速变化的数字资产市场中,一款强大的行…

    2025年12月9日
    000
  • 币圈最新消息软件推荐 币圈最新动态资讯软件大全

    想及时掌握币圈的最新消息和动态,关键是要选对工具。市场上没有哪个单一软件能覆盖所有信息,最有效的方法是组合使用几类不同功能的应用。行情数据、新闻快讯、社区讨论,每种信息都有其对应的优质平台。 综合交易平台内置资讯 大型交易所的App不仅用于交易,其内置的资讯系统也非常强大,能将信息与操作紧密结合。 …

    2025年12月9日
    000
  • 波卡(DOT)是什么?“插槽拍卖”又是什么意思?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 波卡(Polkadot)是一个旨在实现区块链间互操作性的下一代协议,它允许独立的区块链相互通信和交换数据。其原生代币是DOT,在网络中扮演着至关重要的角色。 什么是…

    2025年12月9日
    000
  • 什么是稳定币?稳定币类型与对比

    稳定币是一类价格相对稳定的加密货币,通常与法币、贵金属或其他资产挂钩,旨在减少数字资产的价格波动。它在加密市场中被广泛用于支付、交易结算及去中心化金融(DeFi)应用。 稳定币类型 稳定币主要可分为以下几类: 法币支持型稳定币:由法币储备支持,如 USDT(Tether)、USDC,价格通常与美元 …

    2025年12月9日
    000
  • 华尔街的算盘:5亿美元买Ripple什么?一文了解

    Binance币安 欧易OKX ️ Huobi火币️ Ripple获华尔街5亿美元融资并非技术胜利,而是其持有的347亿XRP巨量资产被以折扣价重估,资本看中的是其“数字资产国库”而非业务前景。 2025年11月,Ripple Labs 宣布获得5亿美元新一轮战略融资,公司估值跃升至400亿美元。这…

    2025年12月9日 好文分享
    000
  • 什么是Janction(JCT)币?值得投资吗?Janction技术架构、代币经济和前景分析

    janction (jct) 被公认为首个致力于以可验证、可扩展且去中心化方式交付人工智能(ai)服务的二层网络。该项目将 ai 模型、gpu 算力、数据采集与标注流程整合于一个统一生态,打造了一个融合区块链与人工智能技术的底层基础设施。本文将全面解析 janction 的核心技术架构、实际应用场景…

    2025年12月9日 好文分享
    000
  • Claude拿下冠军,6大AI网格策略对决真相如何?OKX&AiCoin实盘测评

    nof1 推出的「ai 炒币实盘竞技场」第一赛季,终于在 2025 年 11 月 4 日早上 6 点收官,吊足了币圈、科技圈和金融圈的胃口。 Binance币安 欧易OKX ️ Huobi火币️ 但这场“AI 智商公开测试”的结局却有点出乎意料,六个模型总计的 6 万美元本金,收官时只剩 4.3 万…

    2025年12月9日 好文分享
    000

发表回复

登录后才能评论
关注微信