标准io以及文件

标准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--,即所有者有读、写权限,组用户和其他用户有读权限。

标准输入输出(Standard I/O)和文件输入输出(File I/O)是在计算机编程中常用的两种输入输出方式。 标准输入输出(Standard I/O)是指程序与标准输入设备(通常为键盘)和标准输出设备(通常为屏幕)之间的交互。通过标准输入设备,程序可以接收用户的输入;通过标准输出设备,程序可以将结果输出到屏幕上。标准输入输出通常使用类似于C语言中的stdio库中的函数(如printf、scanf等)进行操作。 文件输入输出(File I/O)是指程序与文件之间的交互。通过文件输入,程序可以从文件中读取数据;通过文件输出,程序可以将数据写入到文件中。文件输入输出通常使用类似于C语言中的stdio库中的函数(如fopen、fread、fwrite等)进行操作。 区别: 1. 标准I/O是与标准输入输出设备(键盘和屏幕)之间的交互,而文件I/O是与文件之间的交互。 2. 标准I/O是实时交互的,程序可以实时读取用户输入并输出结果到屏幕上;而文件I/O是对文件进行读写操作,需要先打开文件、读取或写入数据,再关闭文件。 3. 标准I/O比较简单易用,适用于与用户进行交互的场景;而文件I/O更适用于需要对文件进行读写操作的场景,可以对大量数据进行处理。 4. 标准I/O的操作相对较慢,因为需要频繁与外部设备进行交互;而文件I/O的操作相对较快,因为可以直接读写文件而无需频繁与外部设备交互。 需要注意的是,标准I/O和文件I/O并不是互斥的,它们可以同时使用。例如,在程序中可以从文件中读取数据,经过计算后再通过标准输出设备输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值