flock函数 permission denied 问题
aix 伯克利版本 flock
flock函数书名参考 http://blog.csdn.net/lin_fs/article/details/7804494
自己写了一个demo测试,发现总是提示 permission denied
之后无意中发现open函数的第三个参数未送,于是设置第三个参数为0644后,demo测试通过
原open 写法
int fd = open("lock.txt",O_RDWR|O_CREAT);
修改后写法
int fd = open("lock.txt",O_RDWR|O_CREAT,0644);
后查询《UNIX环境高级编程》open函数的使用方法明确说明,使用O_CREAT选项时要明确指定第三个参数
测试demo代码 flock.c
#include <stdio.h> #include <sys/file.h> #include <sys/stat.h> #include <errno.h> int main() { int fd = open("lock.txt",O_RDWR|O_CREAT,0644); if(fd != -1) { if(flock(fd,LOCK_EX|LOCK_NB) != 0) { printf("lock file fail !\n %d %s\n",errno,strerror(errno)); close(fd); return -1; } if(write(fd,"1111\n",5) < 0) { printf("write error\n %d %s",errno,strerror(errno)); close(fd); return -1; } sleep(5); if(write(fd,"1111\n",5) < 0) { printf("write error\n %d %s",errno,strerror(errno)); close(fd); return -1; } }else{ printf("open file fail! \n%d %s\n", errno,strerror(errno)); return -1; } if(flock(fd,LOCK_UN) != 0) { printf("unlock file fail !\n %d %s\n",errno,strerror(errno)); close(fd); return -1; } close(fd); return 0; }
编译
xlc -g -q64 -c flock.c
xlc -g -q64 -o main flock.o -bsd
浙公网安备 33010602011771号