0

我正在编写同时访问文件的 Linux ANSI C cgi-bin 服务器程序。

  1. 是否可以区分文件存在和文件锁定?我用谷歌找不到答案。我想编写一个程序,如果 fd<0(认为文件被锁定了一段时间),它会尝试打开文件几秒钟。但如果文件不存在,它的 fd 也 <0。所以程序会浪费时间等待。

  2. 假设有几个线程尝试在没有锁定的情况下附加到同一个文件。一个尝试添加“AAAA”,另一个尝试添加“BBBB”。结果文件可以像“AABBAABB”吗?或者它总是像 AAAABBBB 或 BBBBAAAA?还是结果无法预料?

4

1 回答 1

0

我假设 IEEE Std 1003.1-2001 可能会遵循 ISO C 标准......

如果 fopen 失败,即 fd < 0,那么系统会设置一些错误代码……您可以检查这些错误代码。如果文件不存在,返回的错误将是

ENOENT 文件名的一个组成部分没有命名现有文件或文件名是一个空字符串。

如需更多参考,请访问: http: //pubs.opengroup.org/onlinepubs/009695399/functions/fopen.html

对于第 2 点:我一直在通过 100 多个进程同时写入单个文件来记录系统中的某些数据,但从未见过记录合并(文件始终以附加模式打开)。即它总是像 AAAABBBB

于 2013-02-12T04:55:12.820 回答