c - Linux ANSI C 同时访问文件和锁定

标签 c linux file locking

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

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

  2. 假设几个线程尝试在不锁定的情况下追加到同一文件。 一个尝试添加“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/

相关文章:

c++ - 指令描述的伪代码

C程序: print in text file 2 numbers in row

android - 编译 Android 内核时需要 ARM 寄存器

c - 如何使用C计算目录中的文件

c - 如何在 while 循环中打开依赖于尚未声明的信息的文件?

c - 使用 C 中的 Enter 键停止用户输入

c++ -//C++ 中的注释与 C 中的/* */

python - 如何在 Linux (virtualbox) 上启动并运行下载的包含许多文件的 python Web 应用程序

linux - 如何向 bash 脚本添加线程?

windows - 如何在 Windows 命令行中使用通配符解码多个文件