gcc 如何处理文件权限?

ash*_*shr 6 permissions gcc files

gcc创建的可执行文件具有执行权限

-rwxrwxr-x
Run Code Online (Sandbox Code Playgroud)

这与源文件具有的权限不同。

-rw-rw-r--
Run Code Online (Sandbox Code Playgroud)

如何gcc设置这些权限?

Gil*_*il' 7

有四件事可以确定文件的权限。

  1. 当应用程序创建文件时,它指定一组初始权限。这些初始权限作为创建文件的系统调用的参数传递(open对于常规文件、mkdir目录等)。
  2. 权限被umask屏蔽,这是正在运行的进程的一个属性。umask 表示从应用程序指定的权限中删除的权限位。例如,umask022删除组写入和其他写入权限。umask007离开组写权限,但使文件完全禁止其他人访问。
  3. 权限可以通过访问控制列表进一步修改。我不会在这篇文章中进一步讨论这些。
  4. 应用程序可以chmod显式调用以将权限更改为它想要的任何内容。拥有文件的用户可以自由设置其权限。

步骤 1 的一些流行的权限集选择是:

  • 666(即为每个人读写)用于常规文件。
  • 600(即读写,仅供所有者使用)用于必须保持私密的常规文件(例如电子邮件或临时文件)。
  • 777(即为每个人读取、写入和执行)用于目录或可执行的常规文件。

尽管应用程序可以并且通常确实在文件创建权限中包含其他人写入权限,但正是 umask 导致文件不是世界可读的。

在 gcc 的情况下,输出文件首先使用权限 666(由 umask 屏蔽)创建,然后 chmod'ed 使其可执行。Gcc 可以直接创建可执行文件,但不能直接创建:它仅在文件编写完成后才使文件可执行,这样您就不会冒险在程序未完成时开始执行该程序。