当前位置:  开发笔记 > 编程语言 > 正文

没有指定模式的Unix O_CREAT标志

如何解决《没有指定模式的UnixO_CREAT标志》经验,为你挑选了1个好方法。

与O_CREAT标志一起使用时,UNIX open()函数的定义是它需要第三个名为mode的参数才能设置文件的权限.

如果没有指定该模式怎么办?

int file;
static const char filename[] = "test.test";

if ((file = open(filename, O_RDWR | O_CREAT | O_TRUNC)) == 1)
{
    perror("Error opening file.");
    exit(EXIT_FAILURE);
}

close(file);

使用这些标志创建的文件会发生什么?在我的系统上,我得到:

-r--r-s---  1 hyperboreean hyperboreean     0 2009-02-25 01:40 test.test

理论上,open函数在堆栈上查找并检查mode参数,最后使用它找到的随机整数.

标准对此有何看法?



1> Jonathan Lef..:

POSIX标准(IEEE 1003.1:2008)原型open()为:

int open(const char *path, int oflag, ...);

描述行为的部分O_CREAT没有说明如果省略必要的第三个参数将会发生什么,这意味着行为是未定义的 - 任何事情都是可能的.

在实践中,使用堆栈的部分堆栈框架或返回地址或类似的东西很可能 - 合理的近似,可以被认为是随机整数.

该POSIX 2008标准有一些有趣的新的(有用)标志open(),包括:

O_FDCLOEXEC 在open时指定close-on-exec.

O_DIRECTORY 指定该文件必须是目录.

O_NOFOLLOW 指定不追逐符号链接.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有