我正在编写 Linux ANSI C cgi-bin 服务器程序,可以同时访问文件。
是否可以区分文件存在和文件锁定? 我用谷歌找不到答案。 我想编写一个程序,如果 fd<0,则尝试打开文件几秒钟 (认为文件被锁定了一段时间)。 但如果文件不存在,它的 fd 也<0。所以程序会浪费时间等待。
假设几个线程尝试在不锁定的情况下追加到同一文件。 一个尝试添加“AAAA”,另一个尝试添加“BBBB”。 结果文件可以像“AABBAABB”吗? 或者它总是像 AAAABBBB 或 BBBBAAAA? 还是结果难以预料?
最佳答案
我假设 IEEE Std 1003.1-2001 可能会遵循 ISO C 标准...
如果 fopen 失败,即 fd < 0,则系统会设置一些错误代码... 您可以检查这些错误代码。如果文件不存在,返回错误为
埃诺特 文件名的组成部分不命名现有文件或文件名是空字符串。
更多引用请访问: http://pubs.opengroup.org/onlinepubs/009695399/functions/fopen.html
对于第 2 点:我一直在通过 100 多个进程同时写入单个文件来记录系统中的某些数据,但从未见过记录合并(文件始终以追加模式打开)。即它总是像 AAAABBBB
关于c - Linux ANSI C 同时访问文件和锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14824690/