C语言文件权限

news2024/10/7 16:44:27

前言

提笔不会忘字的人,提键盘却忘了编程语言,差点忘本了,用python,shell等脚本语言忘记C语言怎么用了,研究文件系统简单的文件读写不会写了,记录一下。

简单的文件读写

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/stat.h>

int main() {
    const char* filename = "example.txt";
    mode_t mode = 0666; // 文件权限模式

    int fd = open(filename, O_CREAT | O_WRONLY, mode);

    if (fd == -1) {
        perror("Failed to open or create file");
        return 1;
    }

    // 文件打开成功,可以进行写入操作
    const char* content = "Hello, World!";
    ssize_t bytes_written = write(fd, content, strlen(content));

    if (bytes_written == -1) {
        perror("Failed to write to file");
        return 1;
    }

    printf("Successfully written %ld bytes to file.\n", bytes_written);


    // 关闭文件
    if (close(fd) == -1) {
        perror("Failed to close file");
        return 1;
    }

    return 0;
}

在这里插入图片描述

细细分析

1.打开方式

open函数是一个在C语言中用于打开文件的系统调用函数。它提供了对文件的创建、打开和访问的功能。open函数的原型如下:

#include <fcntl.h>

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

open函数的参数如下:

  • pathname:要打开或创建的文件的路径名。
  • flags:指定打开文件的方式和行为的标志位。可以使用多个标志位,通过按位或 (|) 运算符进行组合。常用的标志位包括:
    • O_RDONLY:
      功能:以只读方式打开文件。
      示例:open(filename, O_RDONLY);
    • O_WRONLY:
      功能:以只写方式打开文件。
      示例:open(filename, O_WRONLY);
    • O_RDWR:
      功能:以读写方式打开文件。
      示例:open(filename, O_RDWR);
    • O_CREAT:
      功能:如果文件不存在,则创建文件。
      示例:open(filename, O_CREAT | O_WRONLY, mode);
      注意事项:通常与O_WRONLY或O_RDWR一起使用,并需要提供文件的权限模式(mode)参数。
    • O_EXCL:
      功能:与O_CREAT一起使用时,确保文件不存在,防止文件被覆盖。
      示例:open(filename, O_CREAT | O_WRONLY | O_EXCL, mode);
      注意事项:如果文件已经存在,带有O_EXCL标志的open()函数调用将失败返回。
    • O_TRUNC:
      功能:如果文件存在并成功打开,则将其截断为空文件(清空文件内容)。
      示例:open(filename, O_WRONLY | O_TRUNC);
    • O_APPEND:
      功能:在文件末尾追加写入内容,而不是覆盖现有内容。
      示例:open(filename, O_WRONLY | O_APPEND);
    • O_NONBLOCK:
      功能:以非阻塞方式(非等待方式)打开文件,读写操作可能会立即返回。
      示例:open(filename, O_RDONLY | O_NONBLOCK);
    • O_SYNC:
      功能:要求每次写入文件时都要进行物理磁盘同步,确保数据写入磁盘后再返回。
      示例:open(filename, O_WRONLY | O_SYNC);

- mode:只有在使用O_CREAT标志位创建新文件时才需要指定。它用于设置新文件的权限模式(文件的访问权限)。如果不使用O_CREAT标志位,则可以将mode参数省略。

open函数返回一个整数值,表示文件描述符(file descriptor)。如果打开或创建文件失败,返回值为-1,并设置全局变量errno以指示错误的类型。

2.文件权限

文件权限模式选项用于设置文件的读取、写入和执行权限。在UNIX/Linux系统中,可以使用以下选项来设置文件权限模式:

  • S_IRUSR:
    功能:文件所有者的读权限。
    值:0400(八进制)。
  • S_IWUSR:
    功能:文件所有者的写权限。
    值:0200(八进制)。
  • S_IXUSR:
    功能:文件所有者的执行权限。
    值:0100(八进制)。
  • S_IRGRP:
    功能:文件所属组的读权限。
    值:0040(八进制)。
  • S_IWGRP:
    功能:文件所属组的写权限。
    值:0020(八进制)。
  • S_IXGRP:
    功能:文件所属组的执行权限。
    值:0010(八进制)。
  • S_IROTH:
    功能:其他用户的读权限。
    值:0004(八进制)。
  • S_IWOTH:
    功能:其他用户的写权限。
    值:0002(八进制)。
  • S_IXOTH:
    功能:其他用户的执行权限。
    值:0001(八进制)。
  • S_IRWXU:
    功能:用户(拥有者)具有读、写和执行权限。
    值:0700(八进制)。
  • S_IRWXG:
    功能:组具有读、写和执行权限。
    值:0070(八进制)。
  • S_IRWXO:
    功能:其他用户具有读、写和执行权限。
    值:0007(八进制)。

这些选项可以通过按位或运算符(|)组合使用,以设置所需的权限模式。例如,要为文件设置所有者具有读和写权限,而其他用户仅具有读权限,可以使用以下模式:

mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;

如果使用777即为:

mode_t mode = S_IRWXU | S_IRWXG | S_IRWXO;

可以使用%o,进行输出查看mode的值。

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

int main() {
    mode_t mode = S_IRWXU; // 设置文件所有者的权限为读、写和执行

    printf("Mode: %o\n", mode);

    return 0;
}

3.chmod给文件权限

在C语言中,可以使用chmod函数来修改文件的权限。chmod函数的原型如下:

#include <sys/stat.h>

int chmod(const char *pathname, mode_t mode);

chmod函数接受两个参数:

  • pathname:要修改权限的文件路径名。
  • mode:要设置的文件权限模式。
#include <sys/stat.h>
#include <stdio.h>

int main() {
    const char* filename = "example.txt";
    mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; // 设置文件权限为 640
    if (chmod(filename, mode) == -1) {
        perror("Failed to change file permissions");
        return 1;
    }

    printf("File permissions changed successfully.\n");

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1319638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快猫视频模板源码定制开发 苹果CMS 可打包成双端APP

苹果CMS快猫视频网站模板源码&#xff0c;可用于开发双端APP&#xff0c;后台支持自定义参数&#xff0c;包括会员升级页面、视频、演员、专题、收藏和会员系统等完整模块。还可以直接指定某个分类下的视频为免费专区&#xff0c;具备完善的卡密支付体系&#xff0c;无需人工管…

Apipost检测接口工具的基本使用方法

&#x1f440; 今天言简意赅的介绍一款和postman一样好用的后端接口测试工具Apipost 专门用于测试后端接口的工具&#xff0c;可以生成接口使用文档官方下载网站&#xff1a;http://www.apipost.cn 傻瓜式安装—>register->项目->创建项目->APIs->新建目录&…

Spring Boot 3 + Vue 3 整合 WebSocket (STOMP协议) 实现广播和点对点实时消息

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

CTF竞赛密码学题目解析

CTF&#xff08;Capture The Flag&#xff09;竞赛是一个有趣的挑战。密码学是CTF竞赛中的核心元素之一&#xff0c;通常涉及解密、破译密码、理解加密算法等技能。以下是30个题目及答案&#xff0c;新入行的可以看看鸭。 题目及答案 1. Caesar Cipher 描述&#xff1a;给出一…

MinHash-LSH:如何解决医学大模型的大规模数据去重?

MinHash-LSH 最小哈希 局部敏感哈希&#xff1a;如何解决医学大模型的大规模数据去重&#xff1f; 大模型的数据问题MinHash-LSH 最小哈希 局部敏感哈希&#xff1a;大规模数据集去重优化Jaccard相似度&#xff1a;用于比较样本集之间的相似性降维技术 MinhashLSH – 局部敏感…

SCC-Tarjan算法,强连通分量算法,从dfs到Tarjan详解

文章目录 前言定义强连通强连通分量 Tarjan算法原理及实现概念引入搜索树有向边的分类强连通分量的根时间戳追溯值 算法原理从深搜到TarjanTarjan算法流程Tarjan算法代码实现 OJ练习&#xff1a; 前言 强连通分量是图论中的一个重要概念&#xff0c;它在许多领域都有广泛的应用…

Qt之使用QListView加载相册(富文本ToolTip)

一.效果 二.实现 #include "mainwindow.h" #include "ui_mainwindow.h"#include <QStandardItemModel> #include <QFont>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);QFont…

SourceTree 免登录跳过初始设置

用于Windows和Mac的免费Git客户端。 Sourcetree简化了如何与Git存储库进行交互&#xff0c;这样您就可以集中精力编写代码。通过Sourcetree的简单Git GUI可视化和管理存储库。 SourceTree 安装之后需要使用账号登陆以授权&#xff0c;以前是可以不登陆的&#xff0c;但是现在是…

基于ssm办公自动化管理系统论文

摘 要 随着计算机应用的普及、成熟&#xff0c;越来越多公司开始采用网上信息管理系统&#xff0c;网上信息管理系统的运行可以有效的提高企业管理效率。因此&#xff0c;为满足企业办公管理方面的需求&#xff0c;开发了办公自动化管理系统。 本文重点阐述了办公自动化管理系…

c语言:输出1~100的数据以10×10格式

一、题目 以10*10的格式&#xff0c;输出1-100。 如图&#xff1a; 二、思路分析 此题的难点&#xff1a; 1、1-9的要向前空一格&#xff1b; 2、100要向前进一格 三、代码截图【带注释】 四、源代码【带注释】 #include <stdio.h> int main() { //分成三个部分&am…

Axure的交互与情形,事件,动作

交互样式 交互样式是指当用户与原型进行交互时&#xff0c;元素所呈现出的视觉效果。在Axure中&#xff0c;可以通过设置交互样式来调整元素在交互过程中的外观&#xff0c;例如改变颜色、大小、位置等。 交互事件 交互事件是指在用户与原型进行交互时触发的动作。在Axure中&…

计算机图形学头歌合集(题集附解)

目录 CG1-v1.0-点和直线的绘制 第1关&#xff1a;OpenGL点的绘制 第2关&#xff1a;OpenGL简单图形绘制 第3关&#xff1a;OpenGL直线绘制 第4关&#xff1a;0<1直线绘制-dda算法<> 第5关&#xff1a;0<1直线绘制-中点算法<> 第6关&#xff1a;一般直线绘…

使用Log4j与log4j2配置mybatisplus打印sql日志

环境&#xff1a;项目非完全spring项目&#xff0c;没有spring的配置文件。执行sql时老是不打印sql语句。因此进行修改&#xff0c;过程比较坎坷&#xff0c;记录一下。 我尝试使用log4j和log4j2进行配置 最终把这两种全部配置记录上 Log4j配置 如果项目用的是log4j需要进行配置…

nodejs配置express服务器,运行自动打开浏览器

查看专栏目录 Network 灰鸽宝典专栏主要关注服务器的配置&#xff0c;前后端开发环境的配置&#xff0c;编辑器的配置&#xff0c;网络服务的配置&#xff0c;网络命令的应用与配置&#xff0c;windows常见问题的解决等。 文章目录 设置方法&#xff1a;1&#xff0c;安装nodej…

全国软件供应链安全产教融合共同体成立大会在武汉成功举办

为深入学习贯彻党的二十大精神&#xff0c;落实《关于深化现代职业教育体系建设改革的意见》等要求&#xff0c;探索职业教育产教融合创新发展新生态&#xff0c;培养软件供应链安全人才体系&#xff0c;推动教育链、人才链、产业链、创新链的协同发展&#xff0c;12月16日 &am…

Spring 6(二)【IOC原理】

前言 IOC 是Spring的两大核心概念之一&#xff0c;它是一种思想&#xff0c;需要极其熟练的掌握。 今日摘录&#xff1a; 低能无聊的人太多。说他们勤勉&#xff0c;不过是因困为不会合理分配时间&#xff1b;说他们积极&#xff0c;不过是逃避其他困难工作而已。即便说工作只…

20个CobaltStrike实战案例 +插件

案例 1&#xff1a;窃取 token&#xff0c;访问域控或者本地管理员 前提&#xff1a;1.cs 上线的主机要管理员权限 注意点&#xff1a;登录失败时一定要先恢复身份 方式一&#xff1a; Ps #查看进程 steal_token 2020(管理元权限运行的进程号) &#xff0c; shell dir \\dc\c…

UE5:Lumen 框架

1.Lumen渲染流程框架 2.Lumen基本概念 2.1 LumenCard & LumenMeshCards LumenMeshCards&#xff1a;一组带有方向性的模型简化代理&#xff0c;视模型复杂度不同可能包含6个及以上数量的LumenCard&#xff1b;用来提供光照采样的位置和方向。 2.2 LumenCardPage & Lu…

设备制造CRM:一文看懂设备制造行业CRM的作用和优势

设备制造行业客户需求多样化、服务链路长&#xff0c;企业在关注APS、EMS等工业软件之余还要以客户为中心&#xff0c;做好客户服务。设备制造行业CRM管理系统是企业管理客户关系的利器&#xff0c;设备制造行业CRM的作用有哪些&#xff1f;一文带您看懂。 设备制造行业需要解…

kitex快速入门

简介 kitex是字节跳动开源的一款基于 Go语言的rpc框架。 官网 github仓库 gitee地址 安装与使用 kitex具有一键生成的功能&#xff0c;能够一键生成rpc架构&#xff0c;使开发者只关注于逻辑的开发即可。自动生成的源码只需要简单的配置就可使用&#xff0c;十分方便。 安…