当前位置: 首页 > 面试题库 >

在Linux上使用开放系统调用创建文件时,为什么更改文件权限?

姬国安
2023-03-14
问题内容

我正在使用open系统调用创建具有完全权限(777)的文件,但是当我这样做时ls -l,只能看到权限为(755)。您能告诉我为什么文件权限不是777吗?

#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>

int main()
{
        int fd;

        /* Creates a file with full permission*/
        fd = open("test", O_CREAT | O_RDWR | O_APPEND, 0777);

        if (fd = -1)
        {
                return -1;
        }

        close(fd);
}

输出量

     $ ls -l
    -rwxr-xr-x 1 ubuntu ubuntu    0 2012-09-19 11:55 test

问题答案:

系统维护着一个称为的值umask;它是进程的属性,就像PID(进程ID)或EUID(有效用户ID)一样。它将设置为022(八进制),表示系统应从创建的文件中删除组和其他写入权限。

您可以umask(0);在使用前致电,open()以免open()更改您指定的模式。您当然应该这样做以证明这umask是问题所在。但是,通常最好让用户选择umask优先。如果程序不遵守我的umask设置,我会变得很固执。我发现并验证问题后,往往不会再使用它。

该外壳程序还具有一个(内置)命令umask,您可以使用该命令。该022值是明智的默认值;大多数时候,您不希望任何人都在写文件。



 类似资料:
  • 让我来介绍一下文件系统相关的术语: 文件系统 - 一种组织数据的方式,通过提供存储,检索和更新数据的过程,以及管理包含它的设备上的可用空间,数据预期在终止后保留。 Inode - 索引节点是一种结构,存储文件系统对象(文件,目录等)的所有信息,除数据内容和文件名之外。 块 - 可以分配的最小块磁盘空间。它通常默认为 4096 字节,或 4 千字节。 日志 - 一种结构,允许文件系统跟踪什么时候写入

  • Tip ceph fs new 命令是从 Ceph 0.84 起引入的,在此之前,无需手动创建文件系统,名为 data 和 metadata 的存储池默认即存在。 Ceph 命令行现在有了创建和删除文件系统的命令,但是当前一套集群只能有一个文件系统存在。 一个 Ceph 文件系统需要至少两个 RADOS 存储池,一个用于数据、一个用于元数据。配置这些存储池时需考虑: 为元数据存储池设置较高的副本水

  • 我正在编写一个在Chrome中运行的HTML5应用程序,但它将在本地文件系统上运行(所以他们将通过双击html文件来启动它)。当我试图访问文件系统时,它会抛出一个错误,我想这是因为它是一个本地文件。有办法让Chrome允许这样做吗? 如果改为请求临时存储,它仍然会抛出一个错误,但现在是:

  • 摘要 本文介绍了 RT-Thread 文件系统的基本知识和使用方法,帮助开发者更好地使用 RT-Thread 文件系统。并给出了在正点原子 STM32F429-apollo 开发板上验证的代码示例。 简介 第一次接触 RT-Thread 文件系统的开发者可能觉得 RT-Thread 文件系统过于复杂,不知道该从何入手。想要在项目中使用文件系统,却不知道该怎么做。本文将介绍 RT-Thread 文件

  • 本文向大家介绍使用golang获取linux上文件的访问/创建/修改时间,包括了使用golang获取linux上文件的访问/创建/修改时间的使用技巧和注意事项,需要的朋友参考一下 在linux上想获取文件的元信息,我们需要使用系统调用lstat或者stat。 在golang的os包里已经把stat封装成了Stat函数,使用它比使用syscall要方便不少。 这是os.Stat的原型: func S