C:有什么方法可以防止重复打开文件?

时间:2019-05-30 08:24:29

标签: c linux

我希望每个文件一次最多只能打开一次。例如,我有一个C文件

int main()
{
  const char *filename = "test";
  fun1();
  fun2();
  ...
}

void fun1()
{
  fd_1 = open(filename, O_RDWR | O_CREAT | O_APPEND, 0666);
}

void fun2()
{
  fd_2 = open(filename, O_RDWR | O_CREAT | O_APPEND, 0666);
}

即防止fun2在其file_descriptor关闭文件之前打开test。我有什么办法吗? (扫描目录fd/除外)

1 个答案:

答案 0 :(得分:1)

没有可移植的方法来确定文件是否已打开。您不能出于自己的目的使用O_EXCL,因为您不想创建新文件。

一种针对您目的的简单解决方案,附加到日志文件,是在O_APPEND中以main模式打开文件,并将句柄传递给fun1和{{1} },或将其设为全局变量。根据{{​​1}}和fun2的详细信息,以及是否存在嵌套调用,日志文件中的输出可能会以不希望的方式混合。对于此问题,可能需要重新组织输出功能。