2013-02-12 40 views
-2

正确锁定文件我写的ANSI C cgi-bin目录服务器程序。 程序的每个实例都可以同时访问相同的文件。 我做如下:如何在ANSI C

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

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

的原因是,我不能写可行的“FD =打开...”代码。 我的代码在下面创建可执行文件,写入权限未设置。 我不知道为什么

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); 

我不会写也不会追加到该文件。

回答

0

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

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

哦,是的!!!!谢谢!但是可以打开“fopen”,然后“fd = fileno(handle)”,然后锁定fd? – nms 2013-02-12 13:59:47

+0

@nms那么,文档的fcntl说“因为由标准输入输出进行缓冲的(3)库,该包与例程锁定使用记录的应避免;使用读(2)和写入(2)代替 。 “ – nos 2013-02-12 14:33:52

+0

据我所知,”fopen“是低级别”open“的例程,我们应该使用低级别的”open“,”write“,”read“来锁定,而不是”fwrite,...好的。你! – nms 2013-02-12 15:17:26