登录
2022-07-05 19:40:45

文件句来自 免费编辑 添加义项名

B 添加义项
?
义项指多义词征盾足名加货主逐杀的不同概念,如的义项:网球运动员、雨概煤带飞育尼呼歌手等;非诚勿扰的义项:冯小刚执导电影、江苏卫视交友节目等。 查看详细规范>>
末木伟属类别 :
生活日用品
生活日用品
编辑分类

在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统。当完成任务后,再通过调用系统函数来关闭该文件。

基本信息

  • 中文名称

    文件句柄

  • 外文名称

    file handle

  • 重要性

    对于打开的文件是唯一的识别依据

  • 特点

    方便对文件的搜寻与隐藏

  • 领域

    编程语言

目录
360百科1基本简介

折叠 编辑本段 基本简介

一个句柄就是一难基历及标保维个文件、设备、套接字(sock厚弦et)或管道的一个名字, 以便帮助记住正在处理的名字,并隐藏某些没响命如危开缓存等的复杂性。(在内部尼章,句柄类似C++语言的"流"stream, 或BASIC中的I/O通道)句柄使得从不同的地方输入和输出给不同的地方都较容易。使P充福氧职联兵任参玉始erl成为好语言的一个原因是它能和多个文件通讯并一次处理它们。对外部对象友好的符号散世满名字是一个好语言的一个组成部分。

其它使Perl是一个好语言的原因是:Perl是8位的,Per鸡侵尼l是可嵌入的,可以通过扩展模式在Perl中嵌入其他程序。Perl是简明的,网络上容易使用。环境上是清楚的,容易对话。可以以许多不同的方法引用它(就像前面看到的)。总之,语言本身不是如此严格的结构,以至于不能使它超出你的问题。

创建一个句柄,并通过open函数把它和一个文件联结。open有两个参数:句柄和你想与它联结的一个文件名。Perl也给出一些预定义(和预打开的)什存式段经倒诗句柄。stdin是程序的正常输入通道,而stdout是程序的正常输出的通道。stderr是一个附加的输出通道,以便当把输入转为输出时,程序能给出理小一些说明。

一般地,这些句柄和终端联结,所以能输入程序并能看到,但它们也可以和文师振些打每拿宪察便往送件联结。Perl能提供这些预定义句柄,因为操小浓免怀委振起减点架作系统已提供这些。在UNIX, 进程从它的父进程(一般是一个shell)继承标准输入,输出和错误。一个shell的责任之一是建立这些I/O流, 以便子进程不必考虑这些。

既然能为各种目的(输入、输出、管道)使用open函数创建句柄,就的静那铁必须能指明要做什么。就像在UNIX命令行一样,你给文件名简单粉医陈请坏临多速他地加些字符。

可以任意选名字。一旦打开句柄SESAME,它就能被用于存取文件或管道, 直到它被显式地关闭(用close(SES但老控界低落衡AME)),或对同一句柄的一系列open把这个句柄和另一文件联结。

打开一个已打开的句柄是隐式地关闭第一个文件, 使它对文件句柄不可取,并打开一个不同的文件。你必须小心这是你真正想做的。偶然open($handle,$file)的时候,$h顾缺述资书迫垂愿andle正好包含空串(null)。确认设置$handle为某个单一个量,否则将对空句柄打开一个新的文件。

一旦已为输入打开一温假独持毫无触湖个句柄(或使用stdin),就能使用"行读操作"<>,读一行。这个也以钻石操作(Diamond Operator)闻名,因为它的形状<>像女读黑生环转曲士钻石。这个钻石操作包含你想读的句柄()。使用stdid句柄读用户提供的答案,如下:

空钻石操作<>,将从命令行指定的所有文件读想酒消日抗;如果没有指定,从st集团钢din读。(这是许多UNIX"过滤"程序的标准行为)

在print语句中stdout做什么?这就是使用一个输出句柄的方法占张操者再屋析之一。一个句柄可以作为print语句的第一个参数,如果存在,告诉往哪儿输出。在例子中,句柄是冗余的,因为输出已经是stdout。对于输入的缺省是stdin,对于输出的缺千协正演洋结时苏县很础省是stdout。

如果试上面的例子,可以得到一器现增革演个特别的空行。因为读时没有自动过飞态地从输入行中删除换行符(newline)(例如,输入"9")。对于这些情况,Perl提供chop和chomp函数以删除换行符。chop将不加区别地删除(并返回)传给它的最后一个字符,而chomp只删除记录标识的末尾(一般地是""),并返回这样删除的字符数。经常有这样输入一行:

意思是:

这是一个不寻常的程序,它的特殊性就在于使用了"不寻常"的文件句柄。打开的第一个文件的句柄号是05H而不是00H,之所以这样是因为句柄号00H-04H已经被占用了。而且更为特殊的是这五个句柄不是赋旧米济予5个文件的,而附刘早波板些良束资是赋予5种硬件设备。文件和硬件设备竟然又出现了某种联系,要弄清楚这个问题,持具结还是要从一些实际掉境本混烟随香现象出发。

C语言fprintf函数有个用法:

在这个位置上程周确知每检业口普却井放了一个称为stderr的常量,而且这样使用f罪错矿鲁令printf函数可以使引号中的文字在显示器上出现而不是某个文件中,而显示器又恰好是一个硬件设备。由此看来,文件、文件指针和硬件设备确实应该存在某种联系,这种联系并非在汇编语言程序设计中有体现,在C这样的高级语言中已经体现出来了。

stderr这个常量存在于名为stdio.h的一个包含文件中,在C语言中它被称为"标准错误输出设备(standard error output device)"。C语言中还有两个比较常用的常量,分别为stdin和stdout,即标准输入和标准输出设备。这三种设备通常都与键盘和显示器有关,使用fprintf函数从stdin读入数据时相当左质树于等待键盘输入;而向stdout或stderr输出单构品云功液预的内容都在显示器上手尼及洲比液出现。这就像刚刚的那个汇编程序,在那个汇编程序中输出数据时使用了一个特殊的句柄,结果导致了所有的文片么执令地字都出现于显示器上而没有写入文件中。那个特殊句柄代表的是显示器而不是文件。

DOS系统还有一个功能,那就是"重定向"功能。如果在DOS状态基铁雷容命章呼缺觉肥采下按下面这样的格式使用DIR命令,就可以发现文件和设备确越新铁实具有某种不寻常的联系投振营:

本来会在显示器上出现的一行行文件名都跑到一个名叫"FILE.LST"的文件中去了。由此我们设想这样一个结论:我们通过调用DOS的文件句柄功能不仅可以操作文件,同样可以操作一些硬件设备故油慢的非帮备白花果

这个结论是完全正确的,事实上文件与设备本身就具有一些相似的特点:文件可以写入或读出,而硬件继职编才李送套别设备同样可以"写入"(键盘)和"读出"(显示器、打印斗香出同火袁衡职善政)。既然它们具有这样相同的特性,当然可以使用同样的形式来操作,这就是DOS提供了左烈态服那5个特殊句柄的原因。

面的表列出了这5个句柄所代表的硬件设备,其中0、1、2三个句柄是最常用的。这5假景苏种设备在DOS启动之后就已经"打开",因此可以直接使用这5个句柄而不必再编制代码将其打开。有关这5个特殊句柄还有一些更值得深思的地方,比如,能否使用3FH功能从句柄2所表示的设备中读入信息,能否使用40H功能向句柄3所表示的设备输出信息,能否用3EH功能关闭某个句柄所表示的设备。

句柄

设备名称

逻辑设备名

缺省设备

00

标准输入设备

CON

键盘

01

标准输出设备

CON

显示器

02

标准错误设备

CON

显示器

03

标准辅助设备

AUX

串行口

04

标准列表设备

PRN

打印机

至此有关文件操作的几个重要功能--建立、打开、读写、关闭,都已经被讨论。

折叠 编辑本段 辅助功能

句柄是操作系统在生成对象时分配给对象的唯一标识。 通过句柄可以获取操作系统提供的服务。句柄不同于指针,如果得到了一个对象的指针,就可以在此对象上做任何事了。于是系统不给指针,而给用户一个加了限制的,用于跟踪对象的指针的标识--句柄。系统使用句柄向外提供服务就相对安全了。操作系统是通过API提供服务的,对于用户来说,句柄等同于对象指针,但实际上句柄和指针根本不是一回事。

阅读全文

热点资讯

我的关注