fwrite 是原子的吗?

2024-01-03

一个简单的问题:

我需要在我的程序中添加一些日志记录。

如果两个进程在同一文件上使用“fwrite”但不是同一文件描述符,则写入的日志消息将是原子的或混合的。有长度限制吗?

是定义了 ANSI-C 行为还是定义了实现? 如果后者在 MacOSX、Linux 和 Windows MSVC 上是什么?


经过一些研究后,我发现了以下内容link http://gcc.gnu.org/onlinedocs/libstdc++/manual/using_concurrency.html:

POSIX 标准要求 C stdio FILE* 操作是原子的。 符合 POSIX 的 C 库(例如, Solaris 和 GNU/Linux)有一个 用于序列化操作的内部互斥体 在 FILE* 上。

看起来调用应该是原子的,但这取决于您的平台。在同一链接中,还有另一段让您认为程序员应该小心:

所以,对于 3.0,“是 I/O 的多线程安全”必须是 回答说:“是您平台的 C I/O 库线程安全?” 有些是 默认情况下,有些不是;许多报价 C的多种实现 具有不同权衡的库 线程安全和效率。你,那个 程序员,总是被要求 小心多线程。

另外,由于您有两个不同的FILE*在两个不同的过程中,我想你别无选择。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

fwrite 是原子的吗? 的相关文章

  • 当我在组合框中选择一个项目时,如何防止 TextChanged 事件?

    我有一个TextChanged http msdn microsoft com en us library system windows forms control textchanged aspx我的事件ComboBox http msd
  • 计算 XML 中特定 XML 节点的数量

    请参阅此 XML
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 当一组凭据下的计划任务启动的进程在另一组凭据下运行另一个程序时,Windows 是否有限制

    所以我有一个简单的例子 其中我有应用程序 A 它对用户 X 本地管理员 有一些硬编码的凭据 然后它使用硬编码的绝对路径启动带有这些凭据的应用程序 B A 和 B 以及 dotnet 控制台应用程序 但是它们不与控制台交互 只是将信息写入文件
  • Visual Studio 在构建后显示假错误

    我使用的是 Visual Studio 2017 构建后 sln在调试模式下 我收到错误 但是 当我通过双击错误列表选项卡中的错误来访问错误时 错误会从页面中消失 并且错误数量也会减少 我不太确定这种行为以及为什么会发生这种情况 有超过 2
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 在 NaN 情况下 to_string() 可以返回什么

    我使用 VS 2012 遇到了非常令人恼火的行为 有时我的浮点数是 NaN auto dbgHelp std to string myFloat dbgHelp最终包含5008角色 你不能发明这个东西 其中大部分为0 最终结果是 0 INF
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • 使用 omp_set_num_threads() 将线程数设置为 2,但 omp_get_num_threads() 返回 1

    我有以下使用 OpenMP 的 C C 代码 int nProcessors omp get max threads if argv 4 NULL printf argv 4 s n argv 4 nProcessors atoi argv
  • GCC 的“-Wl,option”和“-Xlinker option”语法之间有区别吗?

    我一直在查看一些配置文件 并且看到它们都被使用 尽管在不同的体系结构上 如果您在 Linux 机器上使用 GCC 将选项传递给链接器的两种语法之间有区别吗 据我所知 阅读 GCC 手册时 他们的解释几乎相同 From man gcc Xli
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp
  • 如何使用 C++11 using 语法键入定义函数指针?

    我想写这个 typedef void FunctionPtr using using 我该怎么做呢 它具有类似的语法 只不过您从指针中删除了标识符 using FunctionPtr void 这是一个Example http ideone

随机推荐

  • 将lucene索引分成两半

    将现有 Lucene 索引拆分为两半的最佳方法是什么 即每个拆分应包含原始索引中文档总数的一半 拆分现有索引 无需重新索引所有文档 的最简单方法是 制作现有索引的另一个副本 即 cp r myindex mycopy 打开第一个索引 并删除
  • 元组索引超出范围,Tensorflow

    这是模型 它是基本的张量流模型 可以拍摄数字的图片并告诉您它是什么数字 我知道python中的索引从0开始 我遇到的问题是这行代码 model fit np array test np array num 阅读下面的代码以获取更多信息 im
  • MATLAB调用DLL中函数时的堆栈限制是多少

    我试图弄清楚 当 MATLAB 调用 DLL 中的函数时 堆栈大小限制是多少 有没有办法配置限制 我在用loadlibrary and calllib函数来调用 C 实现的函数 在动态链接库中 我创建了一个测试来找出堆栈限制 我使用 MAT
  • MediaRecorder 无效状态 16

    我正在尝试录制音频并保存到 SD 卡 我收到无效状态异常 我添加了正确的权限 例如 record audio 和 write external storage 我在调用 start 之前已经准备好了 MediaRecorder 为什么我会遇
  • 在后台扫描 Android 8+ 上的 BLE 设备

    我在 Android 8 上使用 BLE 扫描仪 API 中的以下方法 扫描 BLE 信标 startScan List
  • 将 C++ 对象(尤其是 stl 容器)移动到特定的内存位置

    我正在与一个内存管理器合作 有时需要对内存进行碎片整理 基本上 我将浏览内存管理器分配的对象列表并重新定位它们 class A SomeClass data This member is allocated by the special m
  • “索引、关注”或“关注”有什么区别?

    下面的列表有什么区别 首先 你可能知道元机器人 标签 元机器人标签是告诉蜘蛛或爬虫要抓取或索引哪个页面 关注手段 页面将被抓取 没有关注意味着 页面不会被抓取 指数均值 您的页面显示在搜索结果中 无索引意味着 您的页面未显示在
  • Rails 3 SQL 查询选择与连接

    我的选择功能和连接有问题 这是我当前的查询 search Building joins INNER JOIN floors ON floors building id buildings id INNER JOIN spaces ON sp
  • 是否支持内存映射文件作为 uwp 应用程序和 win32 进程之间的 ipc

    官方文档没有正确说明 uwp 是否支持通过内存映射文件的 ipc 我正在研究 uwp 应用程序及其桌面扩展之间的 ipc 场景 虽然我可以使用创建内存映射文件System IO MemoryMappedFiles从 uwp 应用程序code
  • 在打字稿中导出实用函数?

    我正在尝试这样做 伪代码 export const isDefined Function
  • Spring Security 3.1.3 @EnableWebSecurity

    我无法找到 Spring Security 3 1 3 中哪个包包含 EnableWebSecurity 我已经添加了 core config web 和 ldap 安全包 但注释仍然不可用 是否已被其他注释替换 我认为 Spring Se
  • 使用 Blazor 单击提交后清除输入字段

    我想知道是否有人知道如何在按下保存按钮 已提交 后清除所有输入字段 当我返回页面时 我的价值观仍然存在 这是我正在使用的代码 page testform inject BlazorApp6 Data Person person inject
  • 解组单个元素列表失败

    我正在运行一个示例 我再也找不到了 布莱斯 道恩斯博客 http blog bdoughan com在 Glassfish 3 上使用 EclipseLink 2 5 MOXy for JAXB 服务 XmlRootElement XmlA
  • 如何在xsd中引用属性

    我尝试定义一个可以在后续元素定义中引用的属性
  • Python Pika - 消费者进入线程

    我正在开发一个带有后台线程的Python应用程序 用于消费来自RabbitMQ队列的消息 主题场景 我在按钮的 on click 事件上启动线程 这是我的代码 请注意 self receive command def on click st
  • MVC3 中的 CSS 背景图像

    我正在尝试为我的 MVC3 应用程序创建样式表 我不知道如何格式化背景图像 url background image url Content images gradient tile page top png or background i
  • python 错误:“模块”对象没有属性“AF_UNIX”

    这是我的Python代码 if name main import socket sock socket socket socket AF UNIX socket SOCK STREAM sock connect 0 0 0 0 4000 i
  • 重写函数而不删除静态属性

    如果我有一个这样的函数 function a console log a 然后分配一个静态属性 如下所示 a static foo 但是假设我想用另一个函数覆盖该函数 如下所示 var old a a function console lo
  • Spring data mongodb,如何设置SSL?

    到目前为止 我还没有找到关于该主题的良好解释 文档 我在用
  • fwrite 是原子的吗?

    一个简单的问题 我需要在我的程序中添加一些日志记录 如果两个进程在同一文件上使用 fwrite 但不是同一文件描述符 则写入的日志消息将是原子的或混合的 有长度限制吗 是定义了 ANSI C 行为还是定义了实现 如果后者在 MacOSX L