做特价网站百度云网站建设视频教程

web/2025/10/4 12:46:01/文章来源:
做特价网站,百度云网站建设视频教程,桩基工程信息网发布,企业网络营销策略10.1 文件I/O操作概述在Linux系统中#xff0c;文件I/O操作可以分为两类#xff0c;一类是基于文件描述符的I/O操作#xff0c;另一类是基于数据流的I/O操作。10.1.1 文件描述符简介在文件操作一章中#xff0c;也经常提到文件描述符这个概念。所谓文件描述符#xff0c;就…10.1 文件I/O操作概述在Linux系统中文件I/O操作可以分为两类一类是基于文件描述符的I/O操作另一类是基于数据流的I/O操作。10.1.1 文件描述符简介在文件操作一章中也经常提到文件描述符这个概念。所谓文件描述符就是进程与打开的文件的一个桥梁通过这个桥梁才可以在进程中对这个文件进行读写等操作。在Linux环境下每打开一个磁盘文件都会在内核中建立一个文件表项文件表项中存储着文件的状态信息、存储文件内容的缓冲区和当前文件的读写位置。如果同一磁盘文件打开了3次就会创建3个这样的文件表项(a,b和c)读写文件时只会改变该文件表项中的文件读写位置。这3个文件表项存储在一个文件表数组table[3]中在这里table[0]a,table[1]b,table[2]c。这个文件表的下标就称之为文件描述符将这个文件描述符存储在一个数组中des[3]{0,1,2},那么在进程中就可以通过这个des数组下标引用文件表项。也就是说通过文件描述符就可以访问到这个磁盘文件。10.1.2 数据流概述从数据操作方式这个角度来说Linux系统中的文件(无论是普通文件还是设备文件)可以看做是数据流。对文件进行操作之前必须先调用标准I/O库函数fopen()将数据流打开。打开数据流之后就可以对数据流进行输入和输出的操作。标准I/O库函数是C语言中所特有的用于高级接口的函数这些库函数存放在C语言的stdio.h头文件中因此这些用于数据流的I/O操作函数不仅适用于Linux系统还适用于其他的操作系统。由此可见此库函数的引用大大增加了程序的移植性。要对数据流进行读写操作时需要标准I/O库函数和FILE类型的文件指针一起来实现。这个文件指针石达开数据流时返回的指针该指针用来表示要操作的数据流。当执行程序时有3个数据流不需要特定的函数进行打开的操作他们会自动打开。这3个数据流是标准输入、标准输出和标准错误输出。他们是自动打开的当不使用时也会自动关闭。然而调用标准I/O库函数fopen()打开的数据流在对数据流进行操作后需要调用fclose()函数将其关闭。fclose()函数在关闭数据流之前会清空在操作过程中分配的缓冲区并保存数据信息。10.2 基于文件描述符的I/O操作10.2.1 文件的打开与关闭1)open()函数#include#include#includeint open(const char *pathname, int flags)int open(const char *pathname, int flags, mode_t mode)int creat(const char *pathname, mode_t mode)上述的两个open()函数和一个creat()函数在调用成功时都会返回其新分配的文件描述符否则返值为-1并设置适当的error。2)close()函数#incldueint close(int fd)当一个进程终止时内核对该进程的所有尚未关闭的文件描述符调用close()函数关闭所以即使用户程序不调用close()函数在终止时内核也会自动关闭它打开的所有文件。但是对于网络服务器这种一直运行的程序文件描述符一定要及时关闭否则随着打开的文件越来越多会占用大量文件描述符和系统资源。有函数open()返回的文件描述符一定是该进程尚未使用的最小描述符。由于程序启动时自动打开标准输入、标准输出和标准错误输出因此文件描述符0,1,2会存在那么第一次调用open()函数打开文件时返回的文件描述符通常会是3再调用open()函数就会返回4.可以利用这一点在标准输入、标准输出或标准错误输出上打开一个新文件是想重定向的功能。例如首先调用close()函数关闭文件描述符1然后调用open()函数打开一个常规文件则一定会返回文件描述符1这是标准输出就不再是终端而是一个常规文件了再调用printf()函数就不打印到屏幕上而是写到这个文件中了。在文件操作一章中讲到的dup2()函数就是另外一种在指定的文件描述符上打开文件的方法。10.2.2 文件的读写操作1)read()函数#includessize_t read(int fd, void *buf, size_t count)2)write()函数#includessize_t write(int fd, const void *buf, size_t count)10.2.3 文件的定位每个文件都记录着当前读写位置打开文件时读写位置是0表示文件开头通常读写多少个自己就会将读写位置往后移多少个字节。以O_APPEND方式打开文件每次写操作都会在文件末尾追加数据然后间读写位置移动到新的文件末尾。1)lseek()函数lseek()函数可以移动当前读写位置通常称为偏移量该函数的定义形式如下#include#includeoff_t lseek(int fildes, off_t offset, int whence)10.3 基于数据流的I/O操作10.3.1 文件的打开与关闭在操作文件之前要用fopen()函数打开文件操作结束后要用fclose()函数关闭文件。1)fopen()函数#includeFILE *foepn(cosnt char *path, cosnt char *mode)2)fclose()函数#includeint fclose(FILE *fp)10.3.2 字符输入/输出1)fgetc()函数fgetc()函数从指定的文件中读一个字节该函数的定义形式如下#includeint fgetc(FILE *stream)在程序中偶尔会遇到getchar()函数也是用于读取一个字节但它是从标准输入读一个字节。在程序中调用getchar()函数相当于调动fgetc(stdin)在使用fgetc()函数时需要注意一下几点①调用fgetc()函数时指定的文件的打开方式必须是可读的。②函数fgetc()调用成功时返回的是读到的字节应该为unsigned char但fgetc()函数在原型中返回值类型时int原因在于函数调用出错或读到文件末尾时fgetc()会返回EOF即-1保存在int型的返回值是0xffffffff,如果读到字节0xff由unsigned char型转换int 型时0x000000ff只有规定返回值是int型才能把这种情况区分开如果规定返回值是unsigned char型那么当返回值是0xff时则无法区分到底是EOF还是字节0xff。2)fputc()函数#includeint fputc(int c, FILE *stream)10.3.3 字符串输入/输出1)fgets()函数#includechar *fgets(char *s, int size, FILE *stream)对于fgets()函数而言\n是一个特别的字符作为结束符而\0并无任何特别之处只用作普通字符串读入。正因为\0作为一个普通的字符串因此无法判断缓冲区中的\0究竟是从文件读上来的字符还是有fgets()函数自主添加的结束符所以fgets()函数只用于读文本文件而不提倡读二进制文件并且文本文件中的所有字符串不能有\0。2)fputs()#includeint fputs(const char *s, FILE *stream)缓冲区s中保存的是以\0结尾的字符串fputs()将该字符串写入文件stream但并不写入结尾的\0且字符串中可以有\n,也可以没有\n。10.3.4 数据块输入/输出1)fread()和fwrite()函数#includesize_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)10.3.5 格式化输入/输出所谓格式化输入/输出就是按照一定的格式将数据进行输入/输出操作。在程序中经常用到的printf()函数和scanf()函数是用于对终端设备文件的读写操作这两个函数被称为格式化输入/输出因为在使用这两个函数时需要制定读写数据的数据类型并按照一定的格式进行读写。1)格式化输入函数#includeint printf(const char *format,...)int fprintf(FILE *stream, const char *format)int sprintf(char *str, size_t size, const char *format,...)2)格式化输出函数#includeint scanf(const char *format,...)int fscanf(FILE *stream, const char *format,...)int sscanf(const char *str, const char *format,...)10.3.6 操作读写位置的函数1)fseek()函数#inlcudeint fseek(FILE *stream, long offset, int whence)函数fseek()的作用是用来移动文件内部位置指针。2)ftell()函数#inlcudelong ftell(FILE *stream)ftell()函数的作用是得到stream指定的流式文件中的位置。3)rewind()函数void rewind(FILE *stream)rewind()函数的作用是使位置指针重新返回文件的开头该函数没有返回值。10.3.7 C标准的I/O缓冲区C标准库在调用fopen()函数时都会给此文件分配一个I/O缓冲区可以加速读写操作原因在于用户程序需要调用C标准I/O库函数(如fread()、fwrite()等基于文件流I/O操作)读写文件当缓冲区装满后再由系统调用的I/O函数(如read()、write()等基于文件描述符的I/O操作)把读写请求传给内核最终由内核驱动磁盘或设备完成I/O操作。由此看来为文件分配的内存缓冲区大小直接影响到实际操作外村设备的次数内存中为未见分配的缓冲区越大操作外存的次数会越小因此读写数据的速度会越来越快效率就会随之增高。然而有时用户程序等不及将缓冲区都装满之后再传给内核进行I/O操作而是希望把I/O缓冲区中的数据立刻传给内核让内核写回设备这种行为叫做flush操作对应的库函数是fflush()。C标准库的I/O缓冲区有全缓冲、行缓冲和无缓冲3种类型。1)全缓冲如果缓冲区写满了就写回内核。普通文件通常是全缓冲的。2)行缓冲如果用户程序写的数据中有\n就把这一行写回内核或者缓冲区写满后就写回内核。标准输入和标准输出对应中断设备时通常是行缓冲。3)无缓冲用户程序每次调库函数做写操作都要通过系统调用写回内核。标准错误输出通常是无缓冲的。这样用户程序产生的错误信息就可以尽快输出到设备。使用缓冲区时会使用到如下两类操作一个是设置缓冲区属性另外一个是清空缓冲区。4)设置缓冲区属性#includevoid setbuf(FILE *stream, char *buf)void setbuffer(FILE *stream, char *buf, size_t size)void setlinebuf(FILE *stream)int setvbuf(FILE *stream, char *buf, int mode, size_t size)setbuf()函数主要实现了为参数buf所指定的缓冲区设置大小。此函数中设定缓冲区大小的值只有两个一个是常数BUFSIZ另一个是NULL。当定义值为BUFSIZ时代表设置缓冲区为全缓冲若为NULL则代表设置缓冲区为无缓冲形式。setbuffer()与setbuf()功能相同只是setbuffer()函数可以任意指定缓冲区大小为sizesetlinebuf()函数实现了将stream指向的缓冲区设置为行缓冲。setvbuf()函数融合了上述3种函数的功能既可以设置缓冲区的任意大小size也可以设置缓冲区的任意类型如mode参数取值为_IOFBF(全缓冲类型)、_IOLBF(行缓冲类型)或_IONBF(无缓冲类型)。5)清空缓冲区#includeint fflush(FILE *stream)fflush()函数实现将缓冲区中的尚未写入文件的数据强制性地写进stream所指定的文件中然后清空缓冲区。如果stream为NULL此函数会将所有打开的文件数据更新。10.4 小结本章主要介绍了Linux系统下的文件I/O操作。在Linux系统下存在两种文件I/O操作一种是基于文件描述符的I/O操作这里面的I/O操作都是Linux系统中提供并直接作用于内核的是非缓冲的I/O操作另一种I/O操作是基于数据流的I/O操作是由C语言的stdio库所提供的需要在内存中开辟一块缓冲区在缓冲区中进行快速地读写操作。本章主要结合典型实例介绍了上述两种I/O操作方式对文件的打开、关闭、读、写、文件定位等操作。注感觉本文10.3.5之前的内容对我有用让我大概明白了基于数据流的文件I/O和基于文件描述符的文件I/O操作之间的区别。但是如果在给出其中的从操作函数之后给出一些实例就更好了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/86784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

济南网站建设制作设计北京引流推广公司

为什么80%的码农都做不了架构师?>>> 1、图形简介 与html5不同,Raphael提供了以下基本图形:矩形、圆形、椭圆形(html5只有矩形)。 Paper.rect(x,y,width,height,r):绘制矩形; 参…

海宁市建设局官方网站6APP编辑WordPress

前言 在说到对图片资源进行优化时,那就不得不提到图片预加载和图片懒加载,可能很多朋友都了解这两者,但是一直没有很清晰的概念,以及什么时候用,用在什么场景下,今天就来详细的了解一下吧! 图…

网站建网站建设做水利网站需要多少钱

一、前言 K8S经过多年的发展,构建了云原生的基石,成为了云原生时代的统治者。我将用三个博客系列全面,循序渐进的介绍K8S相关知识。 初级入门系列,主要针对K8S初学者,以及希望对K8S有所了解的研发人员,重点…

怎么做汽车网站php和什么语言做网站

最近富文本编辑器jodit终于更新发布到了4.0版本,加入了css变量、有更好的typescript支持,截止发文时的版本是:4.0.5,看到有了新版本于是便想着将本地项目中的jodit版本也进行升级,琢磨着再丰富和添加一些功能&#xff…

建设六马路小学 网站网站集约化建设的好处

1.概要 初步搭建了Layout界面的布局,其中包括左侧导航栏及其路由功能,和右侧头、体、脚部分的大致排版。最后在头部分中的昵称与头像替换成动态数据。 2.Layout主页布局 文件地址:src\views\Layout.vue 2.1 script行为模块 从elementUI中…

建站排行榜有哪些站内推广的方式

文章目录基本介绍入门步骤执行原理Servlet 生命周期线程安全问题解决方式Servlet 注解配置Servlet 继承与实现体系基本介绍 servlet,server applet,服务器端小程序 servlet 是一个接口,定义了 Java 类被浏览器访问(tomcat 识别&…

建立一个网站需要多少钱?网站网络营销外包

uni-app 微信小程序调试不更新问题解决指南 在使用 uni-app 开发微信小程序时,可能会遇到代码修改后无法更新或者不生效的问题。这种现象常见于调试阶段,通常与缓存、编译或代码错误有关。 本文将详细分析调试过程中常见的“不更新”问题,并…

dede能建立手机网站吗计算机做网站开题报告

目录: SpringMVC 的 “整合支持” ( 引入"Web依赖启动器",几乎可以在无任何额外的配置的情况下进行"Web开发")1.SpringMVC "自动配置" 介绍 ( 引入Web依赖启动器"后,SpringBoot会自动进行一些“自动配置”&#xff0…

专业做面膜的网站在线玩网页游戏h5网站大全

光猫就是“光modem”,是指将光以太信号转换成其它协议信号的收发设备,也是起着调制解调的作用。光猫也称为单端口光端机,该设备作为本地网的中继传输设备,适用于基站的光纤终端传输设备以及租用线路设备。而对于多口的光端机一般会…

长沙微网站开发公司网站域名注册流程

一、实验目的 (1)了解图像增强的目的及意义,加深对图像增强的感性认识,巩固所学的图像增强的理论知识和相关算法。 (2)熟练掌握低通、高通、带通、同态滤波器的使用方法,明确不同性质的滤波器…

怎样建设自已的网站英文网站收录提交

const 是 C 语言中的一个关键字,它表示一个对象或变量是常量,即在其生命周期内不可更改。在 C 语言中,const 有多种用法,可以提高代码的可读性和安全性。这里列举了一些关于 const 的常见用法: 声明常量变量&#xff…

ai特效字体网站设计方案步骤

我的 index.jsp 代码是这样 现在每次启动 访问的都是index.jsp 这也是它的默认配置 我这里写了一个 WebServlet 代码是这样 简单可以理解为 我们定义了WebServlet 访问路径为1cginServlet 其中在request作用域中 定义了一个userName值为 欢迎来到jsp世界 然后 跳转向 page.j…

网站建设教程开源代码下载手机网站建设ppt

文 | Mike Shou知乎(ID:Showthem)本文已获作者授权,禁止二次转载0. 写在前面「 开始写这边总结的时候是三月,纽约成了疫情震中,看着新闻报道里的中央公园,中国城,第五大道,往事浮现&…

网站建设纯免费官网太原seo推广优化

在手机侧与穿戴设备侧构建应用到应用的通信隧道,用于收发应用自定义的报文消息以及文件。实现手机应用和穿戴设备应用间的交互,为用户提供分布式场景和体验。比如手机应用发送音频文件到穿戴设备侧应用,实现在穿戴设备侧应用上播放音乐&#…

神奇网站基于php网站建设论文

基于java的SSM框架Vue实现大学生兼职信息网站演示 摘要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认…

网站备案 修改新建网页的方法有哪些

var str "今天是星期" "日一二三四五六".charAt(new Date().getDay());alert(str); 转载于:https://www.cnblogs.com/lccnblog/p/5902525.html

钢筋网片理论重量表规格表南阳做网站优化价格

业务场景:APP列表页右上角有一个立即刷新按钮,点击立即刷新需要刷新当前页面。下面简单实现几个DEMO 效果图 目录 方法1:reload() 方法 方法2:replace() 方法

浏览器怎样屏蔽网站石家庄长安区网站建设公司

知不足而奋进 望远山而前行 目录 文章目录 前言 下载 安装 解压 安装 添加开发包 修改仓库路径 下载软件开发包(慢,不推荐) 解压已有软件开发包(快,推荐) 总结 前言 在嵌入式系统开发中&#x…

网站ueo福建建设执业中心网站

计算机技术在当今的社会,已经变得越来越热,充斥着我们生活的方方面面。人们的工作或是休闲,离不开互联网和电脑,这既受益于各类软件的诞生,也与时下的技术息息相关。Java作为编程界赫赫有名的语言,在最近几…

网站建设代码做网站什么是三网合一

目录 摘要 1. 介绍 2. 数据模型 行 列族 时间戳 3. API 4. 所需构件 5. 实现 5.1 Tablet的位置 5.2 Tablet分配 5.3 Tablet服务 5.4 压实(Compactions) 6. 优化 本地化分组 压缩(compression) 通过缓存提高读操作的性能 Bloom过滤器 C…