什么是文件句柄,对程序员有用?

| 我正在与C一起学习汇编语言。我从这一新的章节开始讨论\'文件句柄\',用于屏幕显示的文件句柄和用于键盘输入的文件句柄等。我不知道什么是文件句柄?我指的是Peter Abel撰写的IBM PC ASSEMBLY LANGUAGE PROGRAMMING     
已邀请:
在计算机软件API的上下文中存在一个通常称为“处理”的通用概念。在评论中,您可能找到了有关该主题的Wikipedia文章的链接。 您正在处理句柄数据类型的特定实现-从“ 0”接口返回的IBM PC / DOS文件句柄。如果您想了解有关这些特定文件句柄的更多信息,则可能需要查阅《未记录的DOS》一书,其中详细介绍了内存中的数据结构,可让您进一步研究这些句柄。 句柄的另一种特定类型是从名为
open()
的POSIX标准接口返回的文件描述符。在Linux,Windows NT,Mac OS和许多其他系统等平台上的C运行时库中实现了此功能。调用
open()
返回的整数可能不是负数。 除非您在DOS下运行,否则Windows NT操作系统可能会提供文件句柄。这些文件句柄从
CreateFile()
返回(用于打开和创建文件),从此函数返回的句柄的唯一非法值是is4ѭ。也就是说,尽管Windows NT API已打开文件,但它可能会返回(通过强制转换)“负”整数。 在所有这些情况下,文件句柄用于引用一些跟踪文件打开方式的数据结构。跟踪的重要一件事是当前文件位置。位置或指针是通过
lseek()
函数在POSIX中设置的,并通过
tell()
函数进行读取。从当前文件指针的位置开始出现任何“ 7”或“ 8”。 您的程序可以在两个不同的句柄下打开同一文件。在这种情况下,每个句柄的文件指针是不同的。使用
lseek()
更新一个句柄的文件指针不会影响另一个句柄指向同一文件的文件指针。     
文件句柄是一个整数值,用于寻址打开的文件。这样的句柄是高度特定于操作系统的,但是在支持open()调用的系统上,您可以这样创建一个句柄:
int handle = open( \"foo.txt\", OTHER_STUFF_HERE );
然后,您可以将句柄用于读/写调用。句柄的不可移植性意味着大多数人会避免使用它们,而是使用C中的流库函数,例如fopen,fread,fwrite等。     
句柄是内核内部用来访问某些资源的东西。只有内核才真正知道其含义,仅告诉用户进程要访问该资源时使用什么值。它们还有另一个优点,就是可以在进程之间共享文件句柄-而您不能使用指针来做到这一点。 Windows使用所有位置的句柄...文件,位图,设备上下文,字体等。     

要回复问题请先登录注册