我正在编写一个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);