我希望每个文件一次最多只能打开一次。例如,我有一个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/
除外)
答案 0 :(得分:1)
没有可移植的方法来确定文件是否已打开。您不能出于自己的目的使用O_EXCL
,因为您不想创建新文件。
一种针对您目的的简单解决方案,附加到日志文件,是在O_APPEND
中以main
模式打开文件,并将句柄传递给fun1
和{{1} },或将其设为全局变量。根据{{1}}和fun2
的详细信息,以及是否存在嵌套调用,日志文件中的输出可能会以不希望的方式混合。对于此问题,可能需要重新组织输出功能。