10.系统级I/O

news/2024/11/7 16:47:03/

1.基础

所有的I/O设备被模型化为文件,所有的输入和输出被当作相应文件的读和写来执行
应用程序在文件结尾检测到EOF(end of file)条件
文本文件是只含有ASCII或Unicode字符的普通文件
二进制文件是所有的其他文件
对于内核,文本文件和二进制文件没有区别
目录是包含一组链接的文件
int open(char *filename, int flags, mode_t mode);
flags指明如何访问:只读、只写、可读可写
flags也可以通过更多位掩码的或,为写提供更多额外提示:不存在就创建、存在就截断、append
mode指定访问权限:使用者/团队成员/任何人+读/写/执行
read、write传送的字节比程序要求的少,不足值的原因:
读时遇到EOF
从终端读文本行
读写网络套接字(socket)
文件的元数据(metadata):文件的信息
int stat(const char *filename, struct stat *buf);
int fstat(int fs, struct stat *buf);
stat以文件名作为输入
fstat以文件描述符作为输入
stat结构:如st_mode(文件访问许可位和文件类型)、st_size(文件的字节数)
DIR *opendir(const char *name);
以路径名作为参数,返回指向目录流的指针
流是对条目有序列表的抽象

2.共享文件

描述符表:表项由进程打开的文件描述符索引
文件表:打开文件的集合,所有进程共享,refcnt为引用次数
关闭一个描述符会减少相应的文件表表项的refcnt,内核不会删除这个文件表表项,直到refcnt=0
(类似于智能指针)
v-node表:包含stat结构的大多信息

子进程有一个父进程描述表的副本,共享文件表集合,共享相同的文件位置。
内核删除相应文件表表项前,父子进程必须都关闭描述符

3.I/O重定向

int dup2(int oldfd, int newfd);
复制描述表表项oldfd到newfd,覆盖newfd以前的内容
dup2(4,1);

4.标准I/O

标准I/O库将一个打开的文件模型化为一个流,如fstream
对于程序员,一个流就是一个指向FILE类型的结构的指针
类型为FILE的流是对文件描述符和流缓冲区的抽象


http://www.ppmy.cn/news/30876.html

相关文章

移动OA系统,联动企业协作让办公高效无间断

随着信息技术的不断发展,企业管理也逐渐从传统的纸质管理转向数字化管理。移动OA系统作为数字化管理的重要工具,被越来越多的企业所采用。移动OA系统不仅可以提高企业管理的效率和准确性,而且还能实现多人协作和无间断工作。 移动OA系统是一…

JDK动态代理(powernode CD2207 video)(内含教学视频+源代码)

JDK动态代理(powernode CD2207 video)(内含教学视频源代码) 教学视频原代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87545977 目录JDK动态代理(powernode CD2207 video&#xf…

【冲刺蓝桥杯的最后30天】day4

大家好😃,我是想要慢慢变得优秀的向阳🌞同学👨‍💻,断更了整整一年,又开始恢复CSDN更新,从今天开始更新备战蓝桥30天系列,一共30天,如果对你有帮助或者正在备…

proteus光敏电阻电路的arduino仿真

虽然Fritzing0.9.10有了仿真的功能,但都是测试板,能够仿真的很有限,所以还是要借助proteus来仿真。这里,我们来实先一个简单的光明电阻的仿真电路。本篇博文,重点演示proteus仿真arduino光敏电阻,arduino采…

C++中的类简要介绍

文章目录前言一、什么是类什么是对象1.类的概述2.对象的概述二、如何创建使用类三、class和struct创建类时的区别1.访问级别2.继承方式总结前言 本篇文章讲给大家介绍一个C中重要的概念,了解了这个概念大家就明白了为什么C会叫做面向对象编程了。 一、什么是类什么…

三八妇女节快乐----IT女神活动随笔

献丑了,一首小小散文诗,请大家轻喷 O(≧口≦)O 我的答案 天下芸芸众生,好似夜幕漫天繁星。 与你相识,只是偶然。 简单的一个招呼,于是开始了一段故事。 我们或是诉说,或是分享; 我们彼此倾听&…

Espressif-IDE v2.8.0 新增功能及开发方向

在乐鑫最近发布的 Espressif-IDE 2.8.0 版本中,我们推出了分区表编辑器和 NVS 分区编辑器功能,优化现有调试器的配置功能并修复多项 Bug ,进一步为用户提升了插件质量以及稳定性。 用户可以点此获取最新版本。 • 若您的设备为 Windows 系统…

【Hello Linux】进程控制 (内含思维导图)

作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:简单介绍下进程的控制 包括进程启动 进程终止 进程等待 进程替换等概念 进程控制介绍进程创建fork函数fork函数的返回值fork函数的使用…