c - 如何在 ANSI C 中正确锁定文件

标签 c file locking

我正在编写一个 ANSI C cgi-bin 服务器程序。 程序的每个实例可以同时访问相同的文件。 我这样做:

handle = fopen(name,type);
fd = fileno(handle);
MyLockFile(fd)  //I use fcntl
.....

问题是我用“fopen”打开文件,而不是用“open”。 “锁定”会以这种方式起作用吗? 我可以锁定“fd”,而不是“handle”。

原因是我无法编写可行的“fd=open...”代码。 我的下面的代码创建了可执行文件,未设置写入权限。 我不知道为什么

fd = open(name,O_CREAT|O_WRONLY|S_IREAD|S_IWRITE|S_IRGRP|
     S_IWGRP|S_IROTH|S_IWOTH);
write(fd,data,strlen(data));
close(fd);

我既不能写入也不能追加到该文件。

最佳答案

你的open()函数是错误的,当你指定O_CREAT时,权限位需要是3.参数,例如

 open(name,O_CREAT|O_WRONLY, 
      S_IREAD|S_IWRITE|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);

关于c - 如何在 ANSI C 中正确锁定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14833576/

相关文章:

c - 结构输出被最后的用户输入覆盖

c - 嵌入式域中 strlen() 的缺点

c# - 获取除 .zip 之外的所有文件

c# - 如何在使用 Excel 文件导出文件时在 C# 中使用数据注释验证

javascript - 大的外部 JSON 文件还是小的 JSON 文件?

Java throttle 机制

concurrency - 悲观与乐观并发(锁定与反馈)

c - 如何从特定内存位置获取结构?

c - 将缓冲区 (char*) 传递给 C 中的函数

c# - 在阻塞的 UI 线程中处理 Windows 消息?