当前位置: 首页 > news >正文

标准文件I/O补充知识

在linux中,文件总共划分为七种,他们分别是:

1、普通文件(regular):存于外部存储器中,用于存储普通数据。

2、目录文件(directory):用于存放目录项,是文件系统管理的重要文件类型。

3、管道文件(pipe):一种用于进程间通信的特殊文件,也称为命名管道FIFO。

4、套接字文件(socket):一种用于网络间通信的特殊文件。

5、链接文件(link):用于间接访问另外一个目标文件,相当于Windows快捷方式。

6、字符设备文件(character):字符设备在应用层的访问接口。

7、块设备文件(block):块设备在应用层的访问接口。

C标准库在应用层,系统·I/O驱动在内核层,硬件开发在硬件层。

图片:代码展示:

#include <stdio.h> 
#include <string.h>
#include <strings.h>// 这三个文件指针可以直接使用
//FILE *stdin;
//FILE *stdout;
//FILE *stderr;#if 0
int main(int argc,char *argv[])
{FILE* fp_r = fopen("1.txt", "r");if (NULL == fp_r){perror("1.txt open fail");return -1;}FILE* fp_w = fopen("2.txt", "w");if (NULL == fp_w){perror("2.txt open fail");return -1;}// 读取1.txt中的数据char buf[101];while(!feof(fp_r)){memset(buf, 0, sizeof(buf));//bzero(buf, sizeof(buf));fread(buf, 20, 5, fp_r);// puts(buf); // 测试语句fwrite(buf, strlen(buf), 1, fp_w);}fclose(fp_r);fclose(fp_w);return 0;
}
#endif#if 1int main()
{char str[] = "hello";fgets(str, 10, stdin);fputs(str, stdout);return 0;
}#endif

文件:标准文件IO、系统文件IO

Linux中一切皆文件(除网口外)。

标准文件IO:C语言标准库中的文件操作函数
fopen、fread、fwrite、fclose、fprintf

系统文件IO:由操作系统直接提供的接口、直接与内核交互
open、read、write、close

差异:
1、缓存机制
标准IO:
默认使用缓冲区,数据先写入缓冲区,当满足条件时才做实际操作。
作用:减少系统调用次数,提升效率。
系统IO:
没有默认缓冲区,每次都是进行系统调用,效率低。
2、跨平台性
标准IO:
接口由C标注你定义,与操作系统无关,同一代码可在不同平台运行,跨平台性强。
系统IO:
接口是由操作系统决定,所以不能跨平台。
3、操作对象
标准IO:
操作对象是 FILE*, 其封装了文件描述符、缓冲区等信息。
系统IO:
Linux下操作对象是文件描述符,Windows下操作对象是句柄。
4、使用场景
标准IO:
通常在用户态下进行个操作。
系统IO:
一般用于底层设备驱动文件等控制。


http://www.dtcms.com/a/291331.html

相关文章:

  • paddleocr安装,数据集制作,训练自己的模型,调用训练好的模型
  • 20250721-day19
  • 【PTA数据结构 | C语言版】双连通分量
  • C# 实现:动态规划解决 0/1 背包问题
  • nextjs编程式跳转
  • 《小白学习产品经理》第七章:方法论之波特五力模型
  • springcloud -- 微服务02
  • Iridium Certus 9704 卫星物联网开发套件
  • cuda编程笔记(9)--使用 Shared Memory 实现 tiled GEMM
  • 补环境基础(二) this的作用和绑定规则
  • 关于Ajax的学习笔记
  • synchronized 修饰符的使用
  • (7)ROS2-MUJOCO联合仿真环境迁移优化
  • MVCC 多版本并发控制 详解
  • C语言(20250721)
  • 【PTA数据结构 | C语言版】验证六度空间理论
  • day20-sed-find
  • 【学习路线】C#企业级开发之路:从基础语法到云原生应用
  • 感知机-梯度下降法
  • 代码随想录day41dp8
  • 教资科三【信息技术】— 学科知识: 第三章(多媒体技术)
  • Java I/O模型深度解析:BIO、NIO与AIO的演进之路
  • CDN和DNS 在分布式系统中的作用
  • JAVA+AI教程-第三天
  • 数据库mysql是一个软件吗?
  • 主流 MQ 的关键性能指标
  • 瑶池数据库Data+AI驱动的全栈智能实践开放日回顾
  • 5.Java的4个权限修饰符
  • 如何用 LUKS 和 cryptsetup 为 Linux 配置加密
  • 3.4 递归函数