You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅复制PIPE_BUF字节时,系统调用splice的操作是否具备原子性?

管道写入原子性相关问题解答

结论

针对Linux平台(splice、sendfile、tee均为Linux特有的系统调用),当写入长度不超过PIPE_BUF时,这三类操作向管道执行的写入均保证原子性,和普通write调用遵循完全相同的规则。

原因说明

  • Linux内核中所有向管道写入的逻辑最终都会进入统一的pipe_write实现函数,上层无论是调用普通write,还是调用splice/sendfile/tee写入管道,都会走相同的判断分支:只要待写入总长度不超过PIPE_BUF,内核就会保证整个写入操作不会和其他写入操作穿插,写入内容连续不拆分。
  • 文档未单独说明这几个系统调用的原子性,是因为PIPE_BUF原子性是管道本身的属性,不是某类写入调用的属性:只要是向管道写入,不管走哪类系统调用,都会遵循管道自身的原子性规则。

注意事项

  • 该规则仅适用于操作目标为管道(含匿名管道、命名管道)的场景,目标为其他类型文件描述符时不生效。
  • 仅写入长度≤PIPE_BUF时保证原子性,超过该长度的所有写入操作都不保证原子性,可能和其他写入操作的内容穿插。

内容的提问来源于stack exchange,提问作者JiaHao Xu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:24:03