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;
}
(三)理解文件


相关文章:
Linux文件
目录 一、基本概念 二、研究进程和被打开文件的关系 (一)w方式 (二)a方式 三、认识系统接口,操作文件 (一)认识文件描述符 (二)举例 (三)…...
素短语的定义
素短语,是指至少含有一个终结符的短语,并且除自身外,不包含更小的素短语。 最左素短语是句型中最左边的素短语。...
【华为OD题库-033】经典屏保-java
题目 DVD机在视频输出时,为了保护电视显像管,在待机状态会显示"屏保动画”,如下图所示,DVD Logo在屏幕内来回运动,碰到边缘会反弹:请根据如下要求,实现屏保Logo坐标的计算算法 1、屏幕是一个800 * 600像素的矩形&…...
clang+llvm多进程gdb调试
clangllvm多进程gdb调试 前言1. 命令行gdb2. 父进程调试3. 子进程调试4. 返回父进程 前言 在学习新增llvm的优化pass时,需要跟踪clang及llvm的调用栈。然而llvm通过posix_spawn()创建了新进程,这使得gdb调试必须有一定的技巧了。 1. 命令行gdb 以下命…...
PHP反序列化简单使用
注:比较简陋,仅供参考。 编写PHP代码,实现反序列化的时候魔法函数自动调用计算器 PHP反序列化 serialize(); 将对象序列化成字符串 unserialize(); 将字符串反序列化回对象 创建类 class Stu{ public $name; public $age; public $sex; publi…...
专业课140+总分420+东南大学920专业综合考研,信息学院通信专业考研分享
专业课140总分420东南大学920专业综合考研,信息学院通信专业考研分享 我是三月开始系统考研备战,寒假先看的高数全书,奈何在家效率极其低下,才草草看了前三四章。回校后学习的比较认真,每天大概保持10个小时左右&…...
数据结构与算法编程题11
已知两个链表A和B分别表示两个集合,其元素递增排列。 请设计算法求出A与B的交集,并存放于A链表中。 a: 1, 2, 2, 4, 5, 7, 8, 9, 10 b: 1, 2, 3, 6, 7, 8 #include <iostream> using namespace std;typedef int Elemtype; #define ERROR 0; #defin…...
【LeetCode刷题】--40.组合总和II
40.组合总和II 本题详解:回溯算法 class Solution {public List<List<Integer>> combinationSum2(int[] candidates, int target) {int len candidates.length;List<List<Integer>> res new ArrayList<>();if (len 0) {return re…...
mysql面试内容点
left join和inner join的区别 1.返回不同 innerjoin只返回两个表中联结字段相等的行。left join返回包括左表中的所有记录和右表中联结字段相等的记录。 2.数量不同 inner join的数量小于等于左表和右表中的记录数量。left join的数量以左表中的记录数量相同。 3.记录属性不同…...
msvcp140.dll是什么?msvcp140.dll丢失的有哪些解决方法
在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp140.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题,我们需要采取一些措施来修复丢失的msvcp140.dll文件。本文将详细介绍5个解决msvcp140.dl…...
数字图像处理(冈萨雷斯)学习笔记
目录 一.机器视觉和计算机视觉二.图像处理基础1.什么是图像2.如何访问图像 三.图像仿射变换四.灰度变换 一.机器视觉和计算机视觉 机器视觉(Machine Vision,MV)和计算机视觉(Computer Vision,CV)的区别和联系: 机器视觉更注重广义图像信号(激光ÿ…...
MES系统管理范围及标准
一、计划管理 1.1计划分为:月度计划>周计划>日计划; 1.2MES系统一般都会直接精确到日计划(生产工单及生产指令); 1.3MES系统日计划分为三阶排产方式: 1.3.1日计划直接排到车间,由车间自行安排任务; 1.3.2日计划排到产线或设备,对应的班组长按照计划直接生产; 1.…...
vscode运行dlv报错超时
描述 点击F5运行dlv调试go代码时报错:couldnt start dlv dap: connection timeout 解决方式 在网上搜索这个报错,据说是dlv的配置问题,修改配置后还是不行。有人说是dlv和go的版本不匹配,就朝这个方向试试 go版本改为1.19之后…...
【Leetcode合集】1. 两数之和
1. 两数之和 1. 两数之和 代码仓库地址: https://github.com/slience-me/Leetcode 个人博客 :https://slienceme.xyz 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并…...
使用Java解决快手滑块验证码
分析页面结构: 使用浏览器开发者工具分析快手滑块验证码页面的HTML和JavaScript结构,找到滑块验证的相关元素和事件。 模拟滑块滑动: 使用Java的Selenium库或其他网络爬虫工具,模拟用户在滑块上的操作。你需要模拟鼠标点击、拖动…...
瑞吉外卖Day06
1.用户地址 1.1实体类 /*** 地址簿*/ Data public class AddressBook implements Serializable {private static final long serialVersionUID 1L;private Long id;//用户idprivate Long userId;//收货人private String consignee;//手机号private String phone;//性别 0 女…...
从暗黑3D火炬之光技能系统说到-Laya非入门教学一~资源管理
我不知道那些喷Laya没有浏览器,嘲笑别人编辑器做不好,是什么水平? 首先目前国内除了WPS和飞书,就没有第三家公司能把编辑器做好。 要是一般的游戏开发者,如我,有一点点引擎代码(某项目&#x…...
for,while,until语句
一、for循环 读取不同的变量值,用来逐个执行同一组命令,经常使用在已经知道要进行多少次循环的场景。 1、基本格式 for 变量名称(注意是名称,不是变量$等) [ in 名称范围 ] (可以不写)do 执行内容 若满足循环则做什么动作do…...
Apache POI简介
三十二、Apache POI 32.1 介绍 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用POI在Java程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下,POI都是用于操作Excel文件。 Apache POI 的应用场…...
基于Qt的UDP通信、TCP文件传输程序的设计与实现——QQ聊天群聊
🙌秋名山码民的主页 😂oi退役选手,Java、大数据、单片机、IoT均有所涉猎,热爱技术,技术无罪 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 获取源码,添加WX 目录 前言一…...
终极3DS游戏格式转换指南:5分钟掌握3dsconv将CCI转CIA
终极3DS游戏格式转换指南:5分钟掌握3dsconv将CCI转CIA 【免费下载链接】3dsconv Python script to convert Nintendo 3DS CCI (".cci", ".3ds") files to the CIA format 项目地址: https://gitcode.com/gh_mirrors/3d/3dsconv 如果你是…...
C++ 仿函数(Functor)深度解析:从基础到应用
引言 在C编程中,我们经常需要将“行为”作为参数传递给函数或算法。C语言中,我们使用函数指针来实现这一需求。但函数指针有局限性:不能携带状态、类型安全性较差。 C提供了更优雅的解决方案——仿函数。 仿函数(Functor&#…...
RPG Maker全系列加密档案解密技术解决方案
RPG Maker全系列加密档案解密技术解决方案 【免费下载链接】RPGMakerDecrypter Tool for decrypting and extracting RPG Maker XP, VX and VX Ace encrypted archives and MV and MZ encrypted files. 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerDecrypter …...
Debian 12 + VMware 17.5.1 保姆级安装与开发环境配置(含国内源、多版本JDK、Maven)
Debian 12 VMware 17.5.1 全栈开发环境配置指南 最近在帮团队搭建本地开发环境时,发现很多Java开发者还在用Windows作为主力开发机。不是说Windows不好,而是当项目规模变大、依赖增多时,Linux环境下的开发效率优势就显现出来了。特别是对于需…...
QT文件对话框QFileDialog的5个高级用法:从多选文件到自定义过滤器
QT文件对话框QFileDialog的5个高级用法:从多选文件到自定义过滤器 在桌面应用开发中,文件选择对话框是最基础也最频繁使用的组件之一。QT框架提供的QFileDialog类看似简单,实则隐藏着许多能显著提升用户体验的高级功能。本文将深入探讨五个常…...
Firecrawl:基于API的网页结构化数据提取工具实战指南
1. 项目概述:一个高效的网页爬取与结构化数据提取工具最近在做一个需要大量网页数据抓取和分析的项目,传统的爬虫方案要么太“重”,要么对动态内容支持不好,要么就是数据清洗和结构化处理起来特别麻烦。在社区里翻找解决方案时&am…...
非结构化数据解析利器:unstructured库从原理到RAG应用实战
1. 项目概述:从混乱到有序,解锁非结构化数据的宝藏 如果你处理过任何形式的数字文档,比如PDF报告、Word合同、Excel表格、网页文章,甚至是电子邮件和图片里的文字,那你一定对“非结构化数据”这个词不陌生。这些数据不…...
从“结构冲突”到“数据冲突”:一次搞懂CPU流水线里的那些“堵车”现场
从“结构冲突”到“数据冲突”:一次搞懂CPU流水线里的那些“堵车”现场 想象一下早高峰的多车道高速公路:收费站太少导致车辆积压(结构冲突),前车货物没卸完就被后车追尾(数据冲突)。CPU流水线中…...
用快马ai五分钟生成gitlab看板原型,加速你的敏捷开发流程
最近在尝试优化团队的敏捷开发流程,发现GitLab的看板功能虽然好用,但有时候需要快速验证一些定制化需求。这时候InsCode(快马)平台就派上用场了——它能让我在5分钟内生成一个可交互的GitLab看板原型,快速验证想法后再迁移到正式环境。 原型设…...
如何快速掌握Blender 3MF格式导入导出:终极免费指南
如何快速掌握Blender 3MF格式导入导出:终极免费指南 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 想要在Blender中无缝处理3D打印文件吗?Blende…...
