首页 > 其他分享 >标准io以及文件

标准io以及文件

时间:2024-08-12 21:59:17浏览次数:9  
标签:文件 txt io fopen 标准 FILE 权限 指针

标准io

IO  input  output

头文件    stdio.h

I输入        O输出

I: 键盘是标准输入设备 ——默认输入就是指键盘  /dev/input
O: 显示器是标准输出设备——默认输出就是指显示器

Linux操作系统当中IO都是对文件的操作
C一部分,任何支持标准C的系统都可使用标准IO实现文件存储
标准IO在UNIX上是对文件IO的封装

一般都是对普通文件操作是一种有缓存的IO 在文件IO和用户程序之间,加入缓冲区,可以有效减少系统调用的效率,节省系统IO调度资源

man命令

man man查看所有man的帮助(man手册如下)

常用:2 - 系统调用(由内核提供的函数)3 - 库调用(程序库中的函数)

注意:直接man xxx会显示其函数;如果没有系统调用则显示其系统库函数调用

文件

可以认为linux中一切都是文件,文件用来存储数据

  • 文件 I/O 涉及文件的读写操作,可以通过系统调用在底层实现。
  • 系统调用 是操作系统提供的服务接口,底层软件常用它来与操作系统内核交互。
  • 文件内容 可以分为文本文件和二进制文件,根据其存储数据的方式不同

文件的类型

在 Linux 中,文件类型可以通过 ls -l命令的输出中的第一个字符来识别。

这里是七种常见的文件类型及其对应的符号:

  1. 普通文件 (-):普通文件类型,例如文本文件、二进制文件等。
  2. 目录 (d):用于表示文件夹或目录。
  3. 符号链接 (l):类似于 Windows 中的快捷方式,指向另一个文件或目录。
  4. 管道文件 (p):一种特殊文件,用于进程间通信(命名管道)。
  5. 套接字文件 (s):用于网络通信的特殊文件。
  6. 字符设备文件 (c):用于与设备进行字符模式(逐字节)的通信,如终端。
  7. 块设备文件 (b):用于与设备进行块模式(块状数据)的通信,如硬盘。

“流”在 C 语言中代表数据的流动方向和形式。当数据从文件流入程序(读操作)或从程序流出到文件(写操作)时,这种字节序列的流动就称为“流”。

流对象(FILE*)可以理解为连接文件和程序的通道,它控制着数据的流动。

struct FILE结构体

FILE 结构体在 C 标准库中定义,用于表示一个文件流对象。这个结构体包含了与文件操作相关的各种信息,如文件指针、缓冲区、文件状态等。

尽管 struct FILE 的内部实现对用户不可见,但它的功能可以通过文件流指针 FILE* 来访问。

文件流指针 FILE*

FILE* 是一个指向 FILE 结构体的指针,它用于操作文件。所有的文件读写操作都通过这个指针来进行。FILE* 指针在文件操作中非常重要,因为它充当文件与程序之间的桥梁。

FILE *fp = fopen("1.txt","r");

fp是一个文件流指针,通过它可以读取或写入文件1.txt

FILE* 指针称为流对象或文件流指针。它管理数据在程序和文件之间的流动,包括流的“头”(数据的起点)和“尾”(数据的终点)

流的分类

流根据处理的数据类型分为两类:

  • 二进制流:处理二进制数据的流。数据在读取或写入时不做任何转换,原样传输。例如,2001\n 在二进制流中将被视为连续的字节序列。

  • 文本流:处理文本数据的流。数据在传输时可能会被转换,例如,行结束符 \n 在不同系统上可能被处理为不同的字符序列。文本流一般用于处理可读的 ASCII 或 UTF-8 编码数据,如 \n(换行符)和 \t(制表符)。

fopen()函数

文件模式

fopen() 函数时不同文件模式的详细解释:

r - 只读模式

  • 文件不存在:报错(返回 NULL)。

  • 文件存在:以只读模式打开文件。文件指针指向文件开头。

    FILE *fp = fopen("filename.txt", "r");

 r+ - 读写模式

  • 文件不存在:报错(返回 NULL)。

  • 文件存在:以读写模式打开文件。文件指针指向文件开头。可以读取和写入,但不会创建新文件。

    FILE *fp = fopen("filename.txt", "r+");

w - 只写模式

  • 文件不存在:创建新文件。

  • 文件存在:以只写模式打开文件,并将文件内容清空。文件指针指向文件开头。

    FILE *fp = fopen("filename.txt", "w");

 w+ - 写读模式

  • 文件不存在:创建新文件。

  • 文件存在:以写读模式打开文件,并将文件内容清空。文件指针指向文件开头。可以读取和写入。

    FILE *fp = fopen("filename.txt", "w+");

 a - 追加写模式

  • 文件不存在:创建新文件。

  • 文件存在:以追加写模式打开文件。文件指针指向文件结尾,可以向文件末尾追加内容,但不能读取文件。

    FILE *fp = fopen("filename.txt", "a");

a+ - 追加读写模式

  • 文件不存在:创建新文件。

  • 文件存在:以追加读写模式打开文件。文件指针指向文件结尾,可以向文件末尾追加内容,并且可以读取文件。

    FILE *fp = fopen("filename.txt", "a+");

    chmod

chmod命令允许用户设置文件的读、写、执行权限,并且可以针对文件的所有者、文件所属的组用户以及其他用户分别设置权限

chmod [选项] 模式 文件名

权限类型

  • r:读权限(read)
  • w:写权限(write)
  • x:执行权限(execute)
数字表示法

数字表示法使用三个八进制数字来设置权限,每个数字对应一组用户的权限。这三个数字依次代表文件所有者、文件所属组的用户和其他用户的权限。

  • 权限值
    • 4:读权限(r
    • 2:写权限(w
    • 1:执行权限(x
    • 0:无权限

示例:

  • chmod 755 file.txt

设置文件的权限为 rwxr-xr-x,即所有者有读、写、执行权限,组用户和其他用户有读、执行权限。

  • chmod 644 file.txt

设置文件的权限为 rw-r--r--,即所有者有读、写权限,组用户和其他用户有读权限。

标签:文件,txt,io,fopen,标准,FILE,权限,指针
From: https://blog.csdn.net/weixin_62409078/article/details/141142404

相关文章

  • Java基础入门18:File、IO 流1(方法递归、字符集、IO流-字节流)
    File和IO流FileFile是java.io.包下的类,File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)。IO流用于读写数据的(可以读写文件,或网络中的数据...)File代表文件IO流用来读写数据File创建对象创建File类的对象注意:File对象既可以代表文件、也可以代表文......
  • Java入门基础16:集合框架1(Collection集合体系、List、Set)
    集合体系结构Collection是单列集合的祖宗,它规定的方法(功能)是全部单列集合都会继承的。collection集合体系Collection的常用方法packagecom.itchinajie.d1_collection;importjava.util.ArrayList;importjava.util.HashSet;/**目标:认识Collection体系的特点。*......
  • 三层架构与解耦——IoC&DI机制【后端 7】
    三层架构与解耦——IoC&DI机制在软件开发领域,三层架构(Controller、Service、Dao)是一种广泛采用的架构模式,它通过将应用程序分为三个主要层次来组织代码,旨在提高代码的可维护性、复用性和可扩展性。而解耦(Decoupling)则是实现这些目标的关键技术之一。本文将深入探讨三层架......
  • Fotify扫描结果Open Redirection解决方案
    URL任意跳转漏洞,又叫开放重定向漏洞,是一种常见的安全漏洞。当访问时用widow.href或者window.localtion指定跳转地址时,会报此漏洞。网上的解决方案大致分为两种。方法一:种是对跳转URL进行加密,使用方法functionvalidateURL(surl){varurl......
  • C语言——文件操作
     数据持久化的方法:1.把数据存放到磁盘文件(使用文件可以将数据直接存放在电脑的硬盘上,做到数据的持久化)2.存放到数据库 什么是文件呢?磁盘上的文件就是文件。在程序设计中,一般谈及的文件有两种,从文件功能的角度来分类,有:1.程序文件:如 源程序文件(.h)   目标文件(wi......
  • Unity新输入系统 之 InputAction(输入配置文件最基本的单位)
    本文仅作笔记学习和分享,不用做任何商业用途本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​首先你应该了解新输入系统的构成结构:Unity新输入系统结构概览-CSDN博客InputSystem-Unity手册1.InputAction概览还是需要强调,InputAction中定义了所......
  • 报错:2024-08-12T18:39:35.313+08:00 ERROR 29668 --- [demo2] [ main] o.s.
    org.springframework.beans.factory.BeanDefinitionStoreException:Failedtoparseconfigurationclass[com.example.demo.DemoApplication]atorg.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:179)~[spring-con......
  • 【待做】【文件传输系列】
    上传:从kali到windowscertutilpowershellIWRpowershellwgetcopy\\smbshare\xxxcurl下载:从windows到kali【flaskserver】:fromflaskimportFlask,requestapp=Flask(__name__)@app.route("/upload1",methods=["POST"])defsave_file1()......
  • 重头开始嵌入式第十八天(Linux系统编程 文件IO)
    Linux系统编程内容Linux系统编程涵盖了众多方面的知识和技术: 1. 文件I/O操作:包括打开、读取、写入、关闭文件,以及处理文件的权限、属性等。2. 进程管理:创建新进程、进程的终止、等待进程结束、进程的执行状态控制等。3. 信号处理:接收和处理系统发送的各种信号,以响......
  • 【漏洞复现】Crocus系统文件读取漏洞复现
    》》》漏洞描述《《《        Crocus系统旨在利用人工智能、高清视频、大数据和自动驾驶技术,帮助商用车减少交通事故和货物丢失,提高企业或车队的运营效率。其Download接口存在任意文件读取漏洞,未经身份验证攻击者可通过该漏洞读取系统重要文件。》》》信息收集《......