gpt4 book ai didi

c - 脚本和 C 二进制程序之间的竞争条件

转载 作者:IT王子 更新时间:2023-10-29 01:00:34 25 4
gpt4 key购买 nike

我有一个用 C 编写的程序,它正在将数据写入文件。

C 程序在执行过程中不会一直打开文件,它只是用 ( fopen ("myfile.txt","a") ) 打开文件并写入一些数据然后关闭文件。

在另一边,我有一个脚本文件,可以使用 C 二进制程序同时对同一个文件执行 2 个操作:

  1. 它可以删除文件

  2. 它可以使用命令向文件添加一些行

    echo "some data" >> file

脚本和 C 二进制程序之间是否存在竞争条件的风险? Linux ioctl 是否可以解决此类问题?

如果存在竞争条件的风险,如何在处理文件之前对 C 和 shell 进行检查?

最佳答案

如果两个进程在没有任何“处理”的情况下写入同一个文件,则总是存在竞争条件。 (也许在统计上很小 - 但仍然存在)。

您可以:

  • 使用操作系统调用锁定文件,例如 fcntlflock(参见示例 this qst)
  • 创建一个外部“锁文件”,例如 /some/path/file.lck(内容通常是锁定进程的主机名和进程 ID (pid) - 允许检测停滞锁) 并在每次修改原始文件之前检查其存在(和/或内容)。修改后,您可以简单地删除“锁定文件”)。它作为操作系统级别的锁定要慢得多,但它易于处理并且在 shell 脚本中“锁定”时非常方便)。 (请记住,文件创建始终是原子的)。

关于c - 脚本和 C 二进制程序之间的竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28811991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com