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

时间:2013-02-12 13:23:24

标签: c file locking

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

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

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

原因是我无法编写可行的“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);

我既不能写也不能附加到这个文件。

1 个答案:

答案 0 :(得分:0)

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

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