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

 

posted on 2016-03-30 15:31  uling  阅读(420)  评论(0)    收藏  举报

导航