【1++的Linux】之文件(一)

news2024/11/18 13:34:09

👍作者主页:进击的1++
🤩 专栏链接:【1++的Linux】

文章目录

  • 一,初识文件
  • 二,文件接口

一,初识文件

文件就是文件内容+属性。因此对文件的操作无非就是对文件内容的操作和对文件属性的操作。
我们访问文件,都是经过代码–>编译–>运行–>访问文件。这样的步骤。也就是说访问文件本质是进程在进行访问。
文件都是在硬件中放着,向硬件中访问与写入,只有操作系统才有这样的权力。我们普通用户也想写入,只有通过OS提供的接口来进行写入。
我们想想在语言级别中我们是如何对文件进行访问与写入的?------都是通过封装的文件相关的函数就行操作,那为什么不知直接用系统相关的调用函数呢?
原因有如下两点;

  1. 不同OS的系统调用函数不同,如果我们在代码中直接用了某个OS提供的系统调用函数,那么在其他OS下,该代码将会出现错误。因此使用经过语言提供的文件操作函数,可以跨平台。跨平台的方法可以将所有平台的代码都实现一遍,然后经过条件编译,动态裁剪,从而拿到我们当前需要的代码。
  2. 系统调用接口是更为复杂的,因此语言级别的接口都会进行封装,使其更好用。

Linux下一切皆文件。
我们对文件的操作无非就是read/write 。站到进程的角度我们使用printf,打印东西到屏幕上就是一种写:将数据写到屏幕上;使用scanf,进行输入,就是一种读,从键盘中读取数据到变量中。
因此实际上显示器和键盘也是文件。
因此我们可以再来一个小总结:什么是文件呢?

站在系统的角度,能够被写入,或是被读取的 设备就叫文件。狭义来说:就是我们的磁盘文件。广义来说:我们的显示器,键盘,网卡等都是文件。

二,文件接口

#include<stdio.h>
#include<string.h>
int main()
{
    FILE* fd=fopen("test.txt","w+");
   fprintf(fd,"zkn\n");
   char tmp[20];
    rewind(fd);
    fscanf(fd,"%s",tmp);
    fclose(fd);
    printf("%s\n",tmp);
    return 0;
}

#include<stdio.h>
int main()
{
    FILE* fd=fopen("test.txt","w+");
    char name[]={"zkn\n"};
    fwrite(name,sizeof(char),sizeof(name),fd);
    char tmp[10];
    rewind(fd);//文件写入后再读的话需要将文件内部的位置指针指向开头。
    fread(tmp,sizeof(char),sizeof(tmp),fd);
    printf("%s",tmp);
    fclose(fd);
    return 0;
}

以上是我们在C语言中常用的文件操作。
下面展示系统的文件操作接口:

打开文件
在这里插入图片描述
在这里插入图片描述
其中flags代表的是打开的方式,mode代表若文件不存在,新创建文件的权限。
下面我们来详细说说flags。

flags为整型,但是实际上我们不能以整型去看待它,而是把它看作位图。也就是说它的每一位都代表了一种选择。
有如下例子:

#include<stdio.h>
#define ONE 0x1
#define TWO 0x2
#define THREE 0x3

void show(int flags)
{
    if(flags& ONE) printf("one\n");
    if(flags& TWO) printf("two\n");
    if(flags& THREE) printf("three\n");


}
int main()
{
    show(ONE);
    printf("--------------------\n");
    show(ONE|TWO);
    printf("--------------------\n");
    show(ONE|TWO|THREE);
    

    return 0;
}

在这里插入图片描述
通过上述例子我们就能清楚的了解到flags的用法了。

写文件:

在这里插入图片描述

读文件

在这里插入图片描述
下面是系统文件调用接口的演示:

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
int main()
{
   // int fd=open("test.txt",O_RDONLY|O_WRONLY|O_CREAT|O_APPEND,0666);
      int fd=open("test.txt",O_RDONLY);
    if(fd<0)
    {
        perror("open");
        return 1;
    }
    
    const char *name="zkn\n";
    //write(fd,name,strlen(name));//在写入时不需要把'\0‘也写入--因为那是C语言定义的结束标志,和系统无关.
    char buffer[32];
    memset(buffer,'\0',sizeof(buffer));//系统接口在读取时不会自己添加结束符.因此要我们自己添加。
    read(fd,buffer,sizeof(buffer));
    printf("%s",buffer);
    close(fd);
    return 0;
}

结果:
在这里插入图片描述我们的fopen,fread,fwrite实际上都是调用了系统的这些接口,但是是经过了一些封装的,为了方便我们用户使用。像我们fopen函数中打开方式的参数 w,在系统调用这里则是:包含了读,写,默认清空文件,创建文件。这些参数进行或操作才能够有fopen中的w的功能。

新创建的文件会在当前路径下创建。那么什么叫当前路径呢?
就是进程运行时所处的工作路径
有如下例子:
在这里插入图片描述
我们在上一级路径下运行该程序。

加粗样式我们发现其新建的文件也在次路径下,这也就证明了上述的结论。

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

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

相关文章

张量-矩阵操作函数

tf.diag(diagonal,name None),该函数返回一个给定对角值得对角tensor。 示例代码如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior()diagonal tf.constant([2,3,4,5])with tf.Session() as sess:print(sess.run(tf.diag(diagonal))) tf.diag_part(input,na…

maven的pom.xml文件显示被删除

文章目录 1.问题情况2.问题分析3.问题解决 1.问题情况 2.问题分析 这些 pom.xml 文件被 maven 视为了忽略文件。 3.问题解决 路径&#xff1a;File --> Settings --> Build&#xff0c;Execution&#xff0c;Deployment --> Build Tools --> Maven --> Ignor…

Vs - Qt - 下拉窗口示例

下列代码定义了一个窗口&#xff0c;窗口采用竖直布局&#xff1a;一个按钮及一个label。按下按钮时候&#xff0c;窗口扩张&#xff0c;显示label控件。再次按下按钮时&#xff0c;窗口收缩&#xff0c;隐藏label控件。 详细代码如下&#xff1a; #include <QApplication&g…

SAP从入门到放弃系列之QM样本确定

目录 一、样本确定概述-Sample Determination1.1、样本确定的规则1.2、规则维护方式1.2.1、物料主数据的维度1.2.2、任务清单的维度1.2.2.1、采样过程-Sampling Procedure 二、采样过程维护2.1 采样过程-Sampling Procedures概述样本类型评估模式检验点 一、样本确定概述-Sampl…

开源考试系统的安全性及防护措施分析

开源考试系统是一种基于开放源代码的在线考试及评估平台&#xff0c;它提供了灵活、可定制和易于部署的解决方案来满足不同用户的需求。然而&#xff0c;开源考试系统的安全性问题一直备受关注。因为在线考试平台涉及到大量敏感数据和用户隐私&#xff0c;所以必须采取一系列的…

chrome窗口

chrome 窗口的层次&#xff1a; 父窗口类名&#xff1a;Chrome_WidgetWin_1 有两个子窗口&#xff1a; Chrome_RenderWidgetHostHWNDIntermediate D3D Window // 用于匹配 Chrome 窗口的窗口类的前缀。 onst wchar_t kChromeWindowClassPrefix[] L"Chrome_WidgetWin_…

Node-RED系列教程-26node-red操作mqtt代理节点

安装节点&#xff1a;node-red-contrib-aedes 节点图标如下&#xff1a; 流程节点如下&#xff1a; 节点配置&#xff1a;

测试工程师思维学习

一、测试工程师应具备什么思维&#xff1f; 透过现象看本质&#xff0c;拒绝“一叶障目” 01、质疑和系统思维 02、创新思维 03、全局思维 04、风险驱动和组合思维 05、用户为中心和比较思维 06、BT思维和架构扩展性思维 二、测试工程师应避免的思维 01、同化现象 02、定位效…

零基础转行网络工程师,过来人给的一些建议

最近收到好多同学的一些提问&#xff0c;零基础没经验&#xff0c;能不能转行到网络工程师&#xff1f;薪资能有多少&#xff1f;发展前景怎么样&#xff1f; 应该有不少朋友都有这个疑问&#xff0c;那么&#xff0c;今天我尽量给大家做出一个详细的解答&#xff0c;希望能有…

怎么把图片压缩小一点?4个简单的压缩办法

怎么把图片压缩小一点&#xff1f;因为图片太大而带来的不良影响可说是非常的多&#xff0c;例如因为图片体积太大导致电脑中的存储空间越来越小&#xff0c;使得电脑使用起来越来越慢&#xff1b;当我们打开一张体积非常大的图片时无法开&#xff0c;甚至一度让电脑卡死&#…

[SWPUCTF 2021 新生赛]easy_sql - 联合注入||报错注入||sqlmap

这题可以直接参考&#xff1a;[NISACTF 2022]join-us - 报错注入&无列名注入 网站标题提示&#xff0c;参数是wllm ?wllm1   得到&#xff1a;Your Login name:xxx Your Password:yyy 解法一&#xff1a;手注 1、先尝试普通注入?wllm-1union select 1,2,3--   得…

RabbitMQ 安装 示例 全面了解有这一篇就够了

目录 一、基础知识 1. 什么是RabbitMQ 2.什么是消息和队列 3.什么是消息队列 4.什么地方使用RabbitMQ 5.RabbitMQ组成概念 二、如何落地RabbitMQ 1.RabbitMQ环境安装 2.创建系统业务 三、Exchange交换机及实例分析 1.Fanout Exchange (扇形交换机) 2.Direct Exchang…

【拿完年终奖后】想要转行网络安全,一定不要错过这个时间段。

网络安全&#xff0c;作为当下互联网行业中较为热门的岗位&#xff0c;薪资可观、人才需求量大&#xff0c;作为转行必考虑。 在这里奉劝所有零基础想转行&#xff08;入门&#xff09; 网络安全的朋友们 在转行之前&#xff0c;一定要对网络安全行业做一个大概了解&#xf…

2023-10-7 看C++八股的一些困惑

1、编译器常量和运行期常量有什么不同 编译期常量和运行期常量是两种不同的常量类型&#xff0c;它们在常量的定义和使用时具有不同的特点。 编译期常量&#xff08;Compile-time Constant&#xff09;&#xff1a; 编译期常量是在编译阶段就能确定其值的常量。编译器在编译代码…

SpringBatch适配不同数据库的两种方法

一、配置JobRepository Configuration EnableBatchProcessing public class TaskArrangeConfig extends DefaultBatchConfigurer {Autowiredprivate DataSource dataSource;Autowiredprivate JobLauncher jobLauncher;Autowiredprivate JobExplorer jobExplorer;Autowiredpriv…

预测性人工智能会彻底改变SIEM行业吗?

网络安全行业具有高度的活力&#xff0c;始终能够将最新和最优秀的技术融入其系统中。这背后有两个主要原因&#xff1a;首先&#xff0c;网络攻击不断演化&#xff0c;因此组织需要拥有先进技术以便检测复杂的攻击&#xff1b;其次&#xff0c;许多组织的网络架构非常复杂。 …

Unity2D创建帧动画片段

文章目录 概述为角色创建动画Animator组件创建动画片段状态转移 其他文章 概述 动画是游戏中一种使对象表现出运动或变换的方式。当涉及到动画时&#xff0c;我们通常就会用到Animator组件。它允许我们在Unity编辑器中创建、管理和控制这些动画&#xff0c;并将其应用于游戏对…

png图片给背景添加阴影

原图 效果图 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><styl…

从互联网报告中得出5个关于ITSM的结论

IT服务管理即ITSM正在进入云端&#xff0c;并不断发展以支持移动员工&#xff0c;随着IT服务管理(ITSM)进入云端并发展为支持移动员工&#xff0c;它将迎来一个有趣的时代。ManageEngine的市场分析师表示&#xff0c;随着终端用户对ITSM解决方案的期望开始反映消费者应用程序的…

TikTok体育精彩瞬间:全球体育迷的天堂

体育是连接世界的一种语言&#xff0c;它能够跨越文化和国界&#xff0c;将人们汇聚在一起&#xff0c;共同感受比赛的激情和荣誉。 而在现代社交媒体的时代&#xff0c;TikTok已经成为了全球体育迷的天堂&#xff0c;为他们提供了前所未有的方式来分享和体验体育精彩瞬间。 T…