Linux文件

目录

一、基本概念

二、研究进程和被打开文件的关系

(一)w方式

(二)a方式

三、认识系统接口,操作文件

(一)认识文件描述符

(二)举例

(三)理解文件


一、基本概念

1、所有对文件的操作

  • a、对内容操作
  • b、对属性操作

2、内容是数据,属性也是数据——存储文件,必须既存储内容,又存放数据

  • 此处的文件,默认就是在磁盘上的文件,加载磁盘上的文件,一定会涉及访问磁盘设备(由操作系统来做)

3、我们要访问一个文件的时候,都是要把这个文件先打开

  • 访问的本质:进程要访问一个文件
  • 打开后本质是:将文件加载到内存

4、一个进程可以打开多个文件吗?多个进程可以打开多个文件吗?

  • 加载到内存,被打开的文件,可能会存在多个
  • 进程:打开的文件 = 1 :n(1)

5、根据1和4,操作系统在运行中,可能打开很多个文件,操作系统要不要管理打开的文件呢???需要,如何管理???先描述后组织

 

6、文件按照是否被打开,分成:被打开的文件(在内存),没有被打开的文件(在磁盘中

二、研究进程和被打开文件的关系

(一)w方式

  • w:以写的方式打开,如果文件不存在就创建它 
#include<stdio.h>    
int main()    
{    FILE *fp=fopen("log.txt","w");    if(NULL == fp)    {    perror("fopen");    return 1;    }    const char*msg = "hello world\n";    int cnt = 10;    while(cnt)    {    fputs(msg, fp);    cnt--;    }    fclose(fp);    return 0;                                                                                                                                    
}

(二)a方式

  • a:也是写入,从文件结尾处开始写入,不会清空文件,是追加
#include<stdio.h>    
int main()    
{    FILE *fp=fopen("log.txt","a");    if(NULL == fp)    {    perror("fopen");    return 1;    }    const char *msg = "message.txt\n";    fputs(msg,fp);                                                                                                                               return 0;    
} 

 

 

三、认识系统接口,操作文件

man 2 open
NAMEopen, creat - open and possibly create a file or deviceSYNOPSIS#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);int creat(const char *pathname, mode_t mode);
  • pathname 这是一个字符串,指定要打开或创建的文件的路径名。它可以是文件的相对路径或绝对路径。

  • flags 这是一个整数参数,表示打开文件的方式和行为。它可以是以下几个常见标志的组合:

    • O_RDONLY:只读方式打开文件。
    • O_WRONLY:只写方式打开文件。
    • O_RDWR:读写方式打开文件。
    • O_CREAT:如果文件不存在,则创建文件
    • O_APPEND:在文件末尾追加内容而不覆盖原有内容。
    • O_TRUNC:如果文件存在,并且以写入方式打开,那么清空文件内容。
    • O_EXCL:与O_CREAT一同使用时,如果文件存在则返回错误。
  • mode 这是一个权限参数,仅在使用O_CREAT标志时才需要提供。它定义了新创建文件的权限。通常使用八进制表示,比如 0644 表示文件所有者具有读写权限,其他用户只有读权限。

  • 返回值:返回一个文件描述符(fd),如果出现错误则返回-1

(一)认识文件描述符

#include<stdio.h>    #define print1  1         //0001    
#define print2 (1<<1)     //0010    
#define print3 (1<<2)     //0100    
#define print4 (1<<3)     //1000    void print(int flags)    
{    if(flags & print1) printf("hello 1\n"); //检查 flags 中是否包含 print1 对应的标志位if(flags & print2) printf("hello 2\n");    if(flags & print3) printf("hello 3\n");    if(flags & print4) printf("hello 4\n");    else printf("None\n");    
}    
int main()    
{    print(print1); //输出了 hello 1,因为 print1 代表的标志位被设置 printf("------------\n");    print(print1|print2);//输出了 hello 1 和 hello 2,因为 print1 和 print2 的标志位都被设置 printf("------------\n");    print(print1|print2 | print3); printf("------------\n");    print(print3|print4);    printf("------------\n");                                                                                                                    print(print4);    return 0;    
}

 

(二)举例

#include <stdio.h>    
#include <unistd.h>//close的头文件    
#include <string.h>//strlen的头文件    
//下面三个是open的头文件    
#include <sys/types.h>    
#include <sys/stat.h>    
#include <fcntl.h>    int main()    
{    umask(0);//更改掩码    int fd = open("log.txt",O_WRONLY | O_CREAT | O_TRUNC, 0666);    if(fd < 0)    {    perror("open");    return 1;    }    const char *msg="aaaaa";    write(fd,msg,strlen(msg));    close(fd);    return 0;    
} 

 

 

(三)理解文件

 

 

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

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

相关文章

2023年中国油墨树脂主要环节、产量及市场规模分析[图]

油墨树脂是指用于油墨制造中的一种高分子材料&#xff0c;主要用于改善油墨的粘性、流动性、光泽度和耐磨性等性能。其主要成分为合成树脂&#xff0c;如聚酯、聚酰胺、聚丙烯酸酯等。油墨树脂在油墨制造中的应用非常广泛&#xff0c;可以用于各种类型的油墨&#xff0c;包括印…

github访问不了问题

git clone github上的项目的时候&#xff0c;不是访问不了&#xff0c;就是克隆过程被中断了 最近找到一个代理&#xff0c;从代理那里clone而不是github上 GitHub代理 – 初果编程

python BDD 的相关概念

在Python 语言中进行BDD的规格和测试文件的编写的时候&#xff0c;常常会遇到下面的概念&#xff1a; Fixture : 测试设施。设定测试环境的预设状态或值的机制。Background&#xff1a; 背景。所有场景的公共部分。Scenario&#xff1a; 场景。Given &#xff1a; 前置条件Whe…

centos7 安装node.js,不用wget也不用解压文件

更新系统&#xff1a;首先&#xff0c;更新系统的软件包列表和已安装的软件包。在终端中以root用户或具有sudo权限的用户身份运行以下命令&#xff1a; sudo yum update添加Node.js源&#xff1a;CentOS 7默认的软件仓库中可能不包含最新的Node.js版本。因此&#xff0c;我们需…

[leetcode 数位运算] 2939. 最大异或乘积 M

给你三个整数 a &#xff0c;b 和 n &#xff0c;请你返回 (a XOR x) * (b XOR x) 的 最大值 且 x 需要满足 0 < x < 2n。 由于答案可能会很大&#xff0c;返回它对 109 7 取余 后的结果。 注意&#xff0c;XOR 是按位异或操作。 示例 1&#xff1a; 输入&#xff1…

git中的分支管理:git branch,git checkout,解决git中的分支冲突的方法【Git学习三】

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;Git等软件工具技术的使用 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要…

vue2 识别页面参数中的html

在Vue 2中&#xff0c;你可以使用v-html指令来识别页面参数中的HTML内容。v-html指令允许你将HTML代码作为Vue模板的一部分进行渲染。 以下是一个示例&#xff0c;演示了如何在Vue 2中使用v-html指令来识别页面参数中的HTML内容&#xff1a; <template><div v-html&…

C语言计算一个数的 n 次方

1、要求 计算一个数的 n 次方&#xff0c;例如: 2 3&#xff0c;其中 2 为基数&#xff0c;3 为指数。 2、使用for循环 #include <stdio.h> int main(){int i,j,k,l1;printf("请输入基数和指数&#xff1a;");scanf("%d %d",&i,&j);for(k…

双流网络论文精读笔记

精读视频&#xff1a;双流网络论文逐段精读【论文精读】_哔哩哔哩_bilibili Two-Stream Convolutional Networks for Action Recognition in Videos 传统的神经网络难以学习到物体的运动信息&#xff0c;双流网络则通过光流将物体运动信息抽取出来再传递给神经网络 给模型提供…

Golang 中的良好代码与糟糕代码

最近&#xff0c;有人要求我详细解释在 Golang 中什么是好的代码和坏的代码。我觉得这个练习非常有趣。实际上&#xff0c;足够有趣以至于我写了一篇关于这个话题的文章。为了说明我的回答&#xff0c;我选择了我在空中交通管理&#xff08;ATM&#xff09;领域遇到的一个具体用…

linux部署jar 常见问题

1.java -jar xxx.jar no main manifest attribute, in xxx.jar 一.no main manifest attribute, in xxx.jar 在pom.xml文件中加入&#xff1a; <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifac…

C语言每日一题(35)有效的括号

力扣网 20 有效的括号 题目描述 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右…

CountDownLatch和CyclicBarrier

JUC&#xff08;Java.util.concurrent&#xff09;是Java 5中引入的一个并发编程库&#xff0c;它包含了许多用于多线程处理的工具类和接口。JUC主要提供了以下特性&#xff1a; 线程池&#xff1a;线程池可以提高线程的使用效率&#xff0c;避免频繁地创建和销毁线程&#xff…

Kotlin学习——hello kotlin 函数function 变量 类 + 泛型 + 继承

Kotlin 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复用代码&#xff0c;以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

Docker Swarm总结(2/3)

目录 8、service 操作 8.1 task 伸缩 8.2 task 容错 8.3 服务删除 8.4 滚动更新 8.5 更新回滚 9、service 全局部署模式 9.1 环境变更 9.2 创建 service 9.3 task 伸缩 10、overlay 网络 10.1 测试环境 1搭建 10.2 overlay 网络概述 10.3 docker_gwbridg 网络基础…

【DevOps】Git 图文详解(八):后悔药 - 撤销变更

Git 图文详解&#xff08;八&#xff09;&#xff1a;后悔药 - 撤销变更 1.后悔指令 &#x1f525;2.回退版本 reset3.撤销提交 revert4.checkout / reset / revert 总结 发现写错了要回退怎么办&#xff1f;看看下面几种后悔指令吧&#xff01; ❓ 还没提交的怎么撤销&#x…

Visual Studio连接unity编辑器_unity基础开发教程

Visual Studio连接unity编辑器 问题描述解决方法意外情况 问题描述 当我们在unity编辑器中打开C#脚本的时候发现Visual Studio没有连接unity编辑器&#xff0c;在编写代码的时候也没有unity关键字的提醒。 简单来说就是敲代码没有代码提示。 解决方法 这时候需要在unity中进行…

Qt实现图片旋转的几种方式(全)

目录 一、用手搓&#xff08;QPainter&#xff09; 二、使用 QGraphicsView 和 QGraphicsPixmapItem 三、使用 QTransform 实现图像旋转 四、利用 OpenGL 实现旋转图像的效果有几种不同的方法&#xff0c;其中常见的包括&#xff1a; 手动旋转绘制&#xff1a; 使用 QPaint…

网络吞吐量 公网带宽有关吗?

环境&#xff1a; 华为交换机 深信服防火墙 问题描述&#xff1a; 网络吞吐量 公网带宽有关吗&#xff1f; 解决方案&#xff1a; 网络吞吐量网络吞吐量是指在特定时间内通过网络传输的数据量。它衡量了网络设备&#xff08;如防火墙、交换机、路由器&#xff09;或网络连…

终端仿真软件 SecureCRT v9.4.2

SecureCRT是一款终端仿真软件&#xff0c;它提供了类似于Telnet和SSH等协议的远程访问功能。SecureCRT专门为网络管理员、系统管理员和其他需要保密访问网络设备的用户设计。 SecureCRT具有以下特点&#xff1a; 安全性&#xff1a;SecureCRT支持SSH1、SSH2、SSL和TLS等加密和…