我正在编写Linux ANSI C cgi-bin服务器程序,可以同时访问文件。
是否可以区分文件存在和文件锁定? 我无法通过Google找到答案。 如果fd <0,我想写一个试图打开文件几秒钟的程序 (认为文件被锁定了一段时间)。 但如果文件不存在,它的fd也<0。所以该计划将浪费时间等待。
假设有几个线程试图在没有锁定的情况下追加到同一个文件。 一个人试图添加&#34; AAAA&#34;,另一个 - &#34; BBBB&#34;。 结果文件可以像&#34; AABBAABB&#34;? 或者它总是像AAAABBBB或BBBBAAAA? 或者结果是不可预测的?
答案 0 :(得分:0)
假设IEEE Std 1003.1-2001可能符合ISO C标准......
如果fopen失败,即fd&lt; 0然后系统设置一些错误代码...... 你可以检查这些错误代码。如果文件不存在,则返回的错误为
ENOENT 文件名的组件不命名现有文件,或文件名是空字符串。
更多参考访问: http://pubs.opengroup.org/onlinepubs/009695399/functions/fopen.html
对于第2点:我一直在系统中记录某些数据,超过100个进程同时写入单个文件,但从未见过记录合并(文件始终以追加模式打开)。即它总是像AAAABBBB