Chinaunix首页 | 论坛 | 博客
  • 博客访问: 214031
  • 博文数量: 53
  • 博客积分: 2626
  • 博客等级: 少校
  • 技术积分: 509
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-27 22:40
文章分类

全部博文(53)

文章存档

2012年(2)

2011年(13)

2010年(10)

2009年(28)

我的朋友

分类: C/C++

2010-12-06 18:52:04


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. 看书的心情
  被一系列的事情打断 就不记得上次看书时 是什么心情了
阅读(1370) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-12-07 15:56:53

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com