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

MOH*_*MED 4 c linux bash shell

我在C中有一个程序将数据写入文件.

C程序在执行期间不保持文件打开,只需用(fopen ("myfile.txt","a"))打开文件并写入一些数据然后关闭文件.

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

  1. 它可以删除该文件

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

    echo "some data" >> file
    
    Run Code Online (Sandbox Code Playgroud)

脚本和C二进制程序之间是否存在竞争风险?Linux ioctl可以管理这样的问题吗?

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

jm6*_*666 8

如果两个进程写入同一文件而没有任何"处理",则始终存在竞争条件.(可能在统计上很小 - 但仍然存在).

您可以:

  • 使用OS调用锁定文件,例如fcntl,flock(参见例如此qst)
  • 创建一个外部"锁定文件" /some/path/file.lck(内容通常是锁定进程的主机名和进程ID(pid) - 允许检测停止锁定)并在每次修改原始文件之前检查其存在(和/或内容) .修改后,您只需删除"锁定文件").它作为操作系统级锁定速度要慢得多,但它易于处理并且非常便于在shell脚本中"锁定".(请记住,文件创建始终是原子的).