长生栈 长生栈
首页
  • 编程语言

    • C语言
    • C++
    • Java
    • Python
  • 数据结构和算法

    • 全排列算法实现
    • 动态规划算法
  • CMake
  • gitlab 安装和配置
  • docker快速搭建wordpress
  • electron+react开发和部署
  • Electron-创建你的应用程序
  • ImgUI编译环境
  • 搭建图集网站
  • 使用PlantUml画时序图
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Living Team

编程技术分享
首页
  • 编程语言

    • C语言
    • C++
    • Java
    • Python
  • 数据结构和算法

    • 全排列算法实现
    • 动态规划算法
  • CMake
  • gitlab 安装和配置
  • docker快速搭建wordpress
  • electron+react开发和部署
  • Electron-创建你的应用程序
  • ImgUI编译环境
  • 搭建图集网站
  • 使用PlantUml画时序图
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 文件操作

    • Linux文件属性
      • 概述
      • 文件模式
      • 访问位控制
      • 示例代码
        • 分析:
        • 执行结果
    • 文件操作
    • 文件操作举例
    • 目录操作
    • 获得目录列表
    • 内存映射
    • 内存映射举例
  • Linux进程和线程

  • Linux信号

  • 进程间通信

  • Socket

  • C语言
  • 文件操作
DC Wang
2023-02-16
目录

Linux文件属性

# Linux文件属性

在 Linux 系统中,所有的资源都被视为文件。文件包括普通文件、目录文件、设备文件、符号链接文件等。在 Linux 中,每个文件都有一组权限,决定了该文件能被哪些用户读、写和执行。

# 概述

Linux的大多数资源都以文件的形式存在

  • 普通文件:以字节为单位进行访问

  • 管道:有名管道、无名管道

  • 目录:也称为目录文件

  • 设备:字符特殊文件、块特殊文件

  • 符号链接:到达另一个文件的路径

  • 套接字:在不同机器间通信

# 文件模式

文件的模式是一个16bit位的域,一般由八进制数来表示

ls -l /bin/cat
-rwxr-xr-x 1 root root 35064 1月  18  2018 /bin/cat
1
2
**** (1~4bit) *** (5~7bit) *********(8~16bit)
文件类型 修饰位 访问位(八进制表示)
管道/目录文件/普通文件等 9bit分成3组(3个八进制数),分别表示:
1.文件的属主对文件权限、
2.文件属主同组的其他成员的权限
3.除上述两种所有其他用户对文件的权限

上面的例子分析如下:

最左侧是个-,表示文件类型是普通文件。接下来rwx,这三位分别表示读、写、执行,即文件的属主对它的权限是读、写、执行。再下面3位r-x,表示文件属主同组的其他成员有读和执行的权限,但是没有写权限。最后3位r-x表示其他用户对该文件有读和执行权限,没有写权限。

# 访问位控制

  • 位掩码umask:设置新创建的文件或目录应关闭的权限位的掩码

  • umask系统调用

    #include <sys/stat.h>
    mode_t umask(mode_t newmask)
    
    1
    2

​ 返回原来的mask值。

# 示例代码

#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	mode_t newmask = 0222, oldmask;

	system("touch before");
	oldmask = umask(newmask);
	printf("old mask is %#o\n", oldmask);
	printf("new mask is %#o\n", newmask);
	system("touch after");
	exit(EXIT_SUCCESS);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 分析:

  • 定义变量newmask=0222,0222是一个8进制数。

  • system("touch before")使用系统的命令touch,用默认的权限生成一个文件before。默认权限644,文件的属主有读写权限,其他用户只有读权限。

  • oldmask = umask(newmask);改变当前文件的掩码,使用0222关闭所有用户的写权限,默认的644就变成了444。

  • system("touch after"); 使用444的权限生成文件after,此时after文件对于任何用户都是只读权限。

# 执行结果

$ ./umask
old mask is 022
new mask is 0222

$ ls -l
总用量 12
-r--r--r-- 1 wx wx    0 2月  16 20:44 after
-rw-r--r-- 1 wx wx    0 2月  16 20:44 before
-rwxrwxrwx 1 wx wx 8432 2月  16 20:42 umask
1
2
3
4
5
6
7
8
9
编辑 (opens new window)
#C#Linux#文件操作
上次更新: 2023/02/19, 10:48:02
文件操作

文件操作→

最近更新
01
ESP32-网络摄像头方案
06-14
02
ESP32-PWM驱动SG90舵机
06-14
03
ESP32-实时操作系统freertos
06-14
更多文章>
Theme by Vdoing | Copyright © 2019-2025 DC Wang All right reserved | 辽公网安备 21021102001125号 | 吉ICP备20001966号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式