函数open


int open(const char *pathname, int flags, ...);


[advanced programming in the unix environment]P.48 关于函数第二个参数对O_CREAT和O_EXCL的描述很有歧义

O_CREAT是说如果文件不存在就创建之 第三个参数mode指定访问权限 如0644(八进制) 如果文件存在就直接打开(第三个参数变成修改权限? 还是直接忽略了?)

一开始以为 O_EXCL必须和O_CREAT一起使用 否则没有作用 实际上O_EXCL本身就是用来测试文件是否存在的 如果文件不存在 则返回出错-1 文件存在则没反应 而当使用O_CREAT|O_EXCL的话则是相反的 如果文件不存在就创建文件 文件存在则返回出错

真是神奇的O_EXCL啊...

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

int main()
{
    int open_description = 0;
    if ((open_description = open("./testfile", O_RDWR|O_CREAT|O_EXCL, 0644))!=-1)
    {
        printf("open successful!\n");
        close(open_description);
    }
    else
        printf("open error!\n");
    return 0;
}


第一次运行程序 创建文件 第二次运行 则返回error
如果if语句里改为O_RDWR|O_EXCL 则第一次就返回error

PS. 看书的心情
  被一系列的事情打断 就不记得上次看书时 是什么心情了

作者: xixidechengbao   发布时间: 2010-12-06