加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

没有指定模式的Unix O_CREAT标志

发布时间:2020-12-16 01:19:48 所属栏目:安全 来源:网络整理
导读:与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(
与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参数,最后使用它找到的随机整数.

标准对此有何看法?

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指定不追逐符号链接.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读