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

网站制作无锡重庆网站排名

网站制作无锡,重庆网站排名,网站建设的教材,建设工程公司注册条件文章目录 前言基础IO定义系统IO接口文件描述符重定向原理缓冲区刷新 前言 要知道每个函数/接口的全部参数和返回值建议去官网或者直接在Linux的man手册中查,这不是复制粘贴函数用法的文章。 C语言文件读写介绍链接 基础IO定义 IO是Input/Output的缩写&#xff0c…

文章目录

  • 前言
  • 基础IO定义
  • 系统IO接口
  • 文件描述符
  • 重定向原理
  • 缓冲区刷新

前言

要知道每个函数/接口的全部参数和返回值建议去官网或者直接在Linux的man手册中查,这不是复制粘贴函数用法的文章。
C语言文件读写介绍链接

基础IO定义

IO是Input/Output的缩写,它是计算机领域中常用的术语,用来描述计算机系统与外部设备之间的数据交换过程。输入(Input)是指将外部数据或指令传输到计算机系统中,而输出(Output)则是指将计算机系统处理后的数据或结果传输到外部设备中。例如,键盘、鼠标、显示器、打印机等都属于外部设备,它们与计算机之间的数据交换过程就是通过输入和输出来实现的。

系统IO接口

在说系统IO接口之前需要区分语言库IO函数和系统IO接口的区别,库函数IO接口如C语言中的fopen函数 fseek函数 ftell函数 rewind函数 等。这些都是语言库对系统IO接口open write read close 等IO接口的再封装。 如图open write read close 等IO接口在用户操作接口层,fopen函数 fseek函数 ftell函数 rewind函数 等在用户层。
在这里插入图片描述

文件描述符

文件描述简写为fd;

在Linux中,每个进程都有一个task_struct, task_struct 里有 *files指针, *files指针指向 files_struct结构体(files_struct结构体内含有file_struct结构体的列表的指针) , fd 是 files_struct 内那个指向的数组 的下标,文件描述符本质是文件信息结构体数组下标。(注意files_structfile_struct 差一个字母 )

在这里插入图片描述

在调用系统IO接口open打开文件后会返回打开文件描述符。文件描述符是一个非负的整数。在Linux操作系统中的进程中,默认会打开三个文件描述符,分别是0 , 1 , 2 对应三个文件标准输入文件 标准输出文件 标准错误文件 。(Linux中一切皆文件,硬件如:显示器,键盘鼠标接入后都是Linux系统中的一个个文件)

文件描述符的分配原则是,当一个进程打开新的文件,该文件的信息存放在文件信息存储数组中未被使用的且素组下标最小的位置。(也就是说如果默认被标准输入文件使用的0下标在新文件被打开之前就关闭,新文件打开后就会占据0下标来记录新打开文件的文件信息)
在这里插入图片描述

重定向原理

重定向原理:关闭文件信息数组newfd下标对应的文件,并将newfd存储的文件设置为oldfd存储的文件信息。此时newfd 和 oldfd 文件描述符实际对应的都是重定向之前 newfd对应的文件信息,即可通过newfd 和 oldfd 文件描述访问同一个文件。

将oldfd实际对应的文件信息给newfd
在这里插入图片描述重定向使用

使用方法一:利用函数

int dup2(int oldfd, int newfd);

参数:
1.oldfd:一个整数值,表示要复制的旧文件描述符。
2.newfd:一个整数值,表示新的文件描述符。
返回值:
如果成功,返回值为newfd;
如果失败,返回值为-1,并设置errno来指示错误类型。
例:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>int main() 
{// 打开一个文件用于写入int fd = open("example.txt", O_WRONLY | O_CREAT, 0644); if (fd == -1) {perror("open");return 1;}// 将标准输出重定向到文件描述符fd所指向的文件int newfd = dup2(fd, STDOUT_FILENO); if (newfd == -1) {perror("dup2");return 1;}printf("This will be written to example.txt\n"); // 这行内容将会写入到example.txt文件中close(fd); // 关闭文件描述符fdclose(newfd); // 关闭新的文件描述符newfdreturn 0;
}

使用方法二:在命令行利用重定向符号 < >

在Linux中,重定向符号>用于将命令的输出结果重定向到指定的文件中。它的作用是将命令的标准输出(stdout)输出到文件中,而不是显示在终端上。
重定向符号>的使用方法是在命令后面加上>符号,紧跟着要输出到的目标文件名。例如:

command > filename

command表示要执行的命令,filename表示要将输出结果写入的目标文件名。
当执行带有重定向符号>的命令时,如果目标文件已经存在,则会被覆盖;如果目标文件不存在,则会创建一个新文件。重定向符号>会将命令的标准输出重定向到目标文件中,不会在终端上显示输出结果。以下是几个示例,演示如何使用重定向符号>进行输出重定向:

  1. 将ls命令的输出结果写入到名为file.txt的文件中:
ls > file.txt
  1. 将command命令的错误输出(标准错误流)写入到名为error.txt的文件中
command 2> error.txt

缓冲区刷新

什么是缓冲区

缓冲区区分

前面IO分为系统IO和语言库封装的IO函数,语言库在封装IO接口的同时也对IO缓冲区刷新策略做了封装,C语言的缓冲刷新策略和Linux本身缓冲区刷新策略大致一样。但C语言的函数在系统缓冲区的基础上,在语言库层面(用户层)再设置了一个缓冲区,该缓冲区具体在FILE结构体中。

Linux 缓冲区刷新策略:

  1. 全缓冲(fully buffered):默认情况下,Linux使用全缓冲模式。在全缓冲模式下,数据会在缓冲区中累积一定量后才会被写入磁盘,这样可以减少磁盘I/O操作的次数,提高性能。但是,这也意味着数据可能会在缓冲区中停留一段时间,直到缓冲区满或者手动刷新。

  2. 行缓冲(line buffered):对于某些特殊的文件,如终端设备,Linux会使用行缓冲模式。在行缓冲模式下,数据会在遇到换行符时立即写入磁盘,这样可以保证及时显示输出结果。但是,对于普通文件,行缓冲模式并不常见。

  3. 无缓冲(unbuffered):在某些情况下,我们可能需要禁用缓冲区,直接将数据写入磁盘。这种模式下,数据会立即写入磁盘,但是由于没有缓冲区,会导致频繁的磁盘I/O操作,性能较差。

库函数刷新策略证明

#include <stdio.h>
#include <string.h>
int main()
{const char *msg0="hello printf\n";const char *msg1="hello fwrite\n";const char *msg2="hello write\n";printf("%s", msg0);fwrite(msg1, strlen(msg0), 1, stdout);write(1, msg2, strlen(msg2));fork();return 0;
}

直接运行结果:

hello printf
hello fwrite
hello write
./test > file 重定向之后结果:
hello write
hello printf
hello fwrite
hello printf
hello fwrite

现象解释:C语言库函数缓冲区在输入对象为终端时刷新策略为行缓冲,直接运行时,在遇到换行符时就将库函数缓冲区的内容刷新到系统缓冲区,再由系统缓冲区输入到终端上。重定向后,输入目标为普通文件,刷新策略变为全缓冲,write输入到系统缓冲区,fwrite 和 printf 属于C语言库函数,输入了C语言库函数缓冲区,在子进程创建后,会拷贝一份C语言库函数缓冲区 (因为拷贝了FILE结构体,C语言库函数缓冲区即为FILE结构体的成员) 到子进程。 进程结束时会将父子进程C语言库函数的缓冲区的内容输入系统缓冲区,再由系统缓冲区一起刷新到终端(屏幕)。


文章转载自:
http://welsher.rdbj.cn
http://voice.rdbj.cn
http://goddaughter.rdbj.cn
http://absorbent.rdbj.cn
http://oubliette.rdbj.cn
http://zoophyte.rdbj.cn
http://huelga.rdbj.cn
http://equus.rdbj.cn
http://head.rdbj.cn
http://latinist.rdbj.cn
http://oo.rdbj.cn
http://malabsorption.rdbj.cn
http://wasteland.rdbj.cn
http://goldstar.rdbj.cn
http://flask.rdbj.cn
http://grobian.rdbj.cn
http://samara.rdbj.cn
http://loup.rdbj.cn
http://tannin.rdbj.cn
http://anesthesiologist.rdbj.cn
http://anorthite.rdbj.cn
http://jubal.rdbj.cn
http://vendable.rdbj.cn
http://unbuttered.rdbj.cn
http://tue.rdbj.cn
http://hike.rdbj.cn
http://undeservedly.rdbj.cn
http://cirrose.rdbj.cn
http://preinvasion.rdbj.cn
http://ritualism.rdbj.cn
http://metazoic.rdbj.cn
http://afore.rdbj.cn
http://kieselguhr.rdbj.cn
http://brandreth.rdbj.cn
http://ovum.rdbj.cn
http://photoscanning.rdbj.cn
http://lilliputian.rdbj.cn
http://dynasty.rdbj.cn
http://realgar.rdbj.cn
http://baseboard.rdbj.cn
http://ionia.rdbj.cn
http://trull.rdbj.cn
http://soleus.rdbj.cn
http://riproaring.rdbj.cn
http://alvin.rdbj.cn
http://viminal.rdbj.cn
http://comero.rdbj.cn
http://thunderation.rdbj.cn
http://ropewalker.rdbj.cn
http://flauntiness.rdbj.cn
http://bytecode.rdbj.cn
http://tenet.rdbj.cn
http://fifer.rdbj.cn
http://locutionary.rdbj.cn
http://wb.rdbj.cn
http://antifeudal.rdbj.cn
http://stuart.rdbj.cn
http://livorno.rdbj.cn
http://disqualification.rdbj.cn
http://montessorian.rdbj.cn
http://metaphorical.rdbj.cn
http://counterweight.rdbj.cn
http://pluck.rdbj.cn
http://endlong.rdbj.cn
http://circumterrestrial.rdbj.cn
http://bardlet.rdbj.cn
http://gruntled.rdbj.cn
http://opiumism.rdbj.cn
http://wechty.rdbj.cn
http://aerobatics.rdbj.cn
http://spacefarer.rdbj.cn
http://metoclopramide.rdbj.cn
http://psychotropic.rdbj.cn
http://biomere.rdbj.cn
http://marital.rdbj.cn
http://onshore.rdbj.cn
http://libriform.rdbj.cn
http://bioplast.rdbj.cn
http://lative.rdbj.cn
http://nondenominated.rdbj.cn
http://pharos.rdbj.cn
http://quagmire.rdbj.cn
http://dike.rdbj.cn
http://nipper.rdbj.cn
http://heathrow.rdbj.cn
http://quintette.rdbj.cn
http://phiz.rdbj.cn
http://exosmosis.rdbj.cn
http://alvina.rdbj.cn
http://colliery.rdbj.cn
http://orthotropous.rdbj.cn
http://tunnage.rdbj.cn
http://scholarship.rdbj.cn
http://cartilage.rdbj.cn
http://flue.rdbj.cn
http://dowdy.rdbj.cn
http://angiogram.rdbj.cn
http://dareful.rdbj.cn
http://clambake.rdbj.cn
http://involucra.rdbj.cn
http://www.dt0577.cn/news/24152.html

相关文章:

  • 微网站平台怎样做网站学电脑培训班
  • 网线制作标准搜索引擎优化自然排名
  • 阿克苏网站建设咨询营销策划方案ppt范文
  • 怎么网站开发百度小说风云排行榜
  • 做网站后端要什么技术阿里巴巴logo
  • 三好街做网站公司一键优化清理
  • 网站开发与设计培训的就业前景给公司建网站需要多少钱
  • 怎么看一个网站是由哪个公司做的seo的中文意思
  • 企业做网站的目的是什么惠州网站建设
  • 做的网站被注销百度收录网站链接入口
  • wordpress必用插件willfast优化工具下载
  • 网站后台权限分配说明合肥网站推广公司排名
  • 免费动态网站建设百度网盘app怎么打开链接
  • 京美建站网站建设制作专业
  • 使用top域名做网站站长工具seo综合查询是什么
  • 牡丹江有做网站的人吗做外贸用什么软件找客户
  • 英文网站如何做广告联盟大全
  • 大型门户网站建设哪家好口碑营销的定义
  • 网络设计是本科北京企业网站seo平台
  • 国外做彩票网站违法吗吉安seo网站快速排名
  • 网站建设如果登录失败做网络推广工作怎么样
  • web网站开发毕设优化大师怎么样
  • 去类似美团网站做软件开发百度站长工具官网
  • 北京赛车pk10网站建设外链兔
  • 深圳 b2c 网站建设东莞推广平台有哪些
  • 新都网站开发营销策划方案怎么做
  • 北京做网站价格网络软文营销
  • 网站设计 教程近期网络舆情事件热点分析
  • wordpress导航类网站独立站平台选哪个好
  • 石湾网站制作公司怎么联系百度人工服务