`
arganzheng
  • 浏览: 101754 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

关于文件描述符和句柄

阅读更多

关于文件描述符和句柄

 

今天jojo突然问我们:“什么叫做句柄?”。我对句柄不是很清楚(Win32下没有怎么编过程),但是我对文件描述符是比较清楚的。但是我觉得应该是差不多的,所以我就这么回答她了:“句柄应该类似与Unix下的文件描述符,是一个内核对象标识。根据这个标识,进程可以访问相应的内核对象。至于为什么不直接返回内核对象地址,原因我想有两个:1. 内核对象驻留在内核地址空件,而进程没有权限访问内核地址空间。C标准库中的File对象返回指针,那是因为它是用户库。2. 不给定内存地址,有利于内核(用户进程也一样)做内存空间调整和优化,而保持对外部透明。很多数据库存储引擎,就是这么实现的——一种称之为slotted page的技术。”晚饭的时候跟几个同事一起讨论了一下,发现很多人都认死数组偏移量其实就是地址,在编译器实现上是这样的,但是对于应用程序来说却不是这样的。
PS:看源码看多了,你会发现很多程序喜欢隐藏实现细节,大量用了typedef XXX YYY。有个英文单词叫做“欧派奇”(具体拼写我忘记了)

分享到:
评论

相关推荐

    linux下文件描述符限制问题

    问题过去有段时间了,忘记当时怎么想到是超过文件描述符限制了。大概是根据句柄的值或者返回的错误码了。 嗯。linux下文件描述符最大限制默认最大为1024,通过 [root@localhost ~]# ulimit -n 1024 这个命令可以...

    Bash中文件描述符的详细介绍

    简单地说,一个文件描述符可以和一个文件挂钩,一旦挂钩就可以通过取地址运算符&获得该文件的句柄,比如&0就可以获得STDIN设备在内存中的句柄(设备在系统中也被当做文件处理),可以这样理解,如果是一个shell中的...

    基于select的Linux串口485读写,文件描述符 fd_set

    基于linux ,使用select检测串口句柄事件,同时进行超时判断的串口485读写操作。为高效可控的linux串口操作例程。tcsetattr,tcflush,select,ioctl,gettimeofday。485收发方向切换。

    Linux文件句柄限制总结

    文件句柄 文章目录文件句柄查看用户级别(nofile)单个进程级别(nr_...关于什么是文件句柄,这里不做讨论,其实linux中没有文件句柄,叫做文件描述符fd 超过最大句柄限制,报错:java.io.IOException: Too many open

    linux 下socket通信中select的用法实例

    即文件句柄,这可以是我们所说的普通意义的文件,当然Unix下任何设备、管道、FIFO等都是文件形式,全部包括在内,所以毫无疑问一个socket就是一个文件,socket句柄就是一个文件描述符。fd_set集合可以通过一些宏由...

    socket编程(源码)

    Socket为了建立Socket,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为:int socket(int domain, int type, int protocol);domain指明所使用的协议族,通常为AF_INET,表示...

    圈圈教你玩USB

    1.7USB的描述符及其之间的关系 1.8USB设备的枚举过程 1.9USB的包结构及传输过程 1.9.1USB的包结构及包的分类 1.9.2令牌包 1.9.3数据包 1.9.4握手包 1.9.5特殊包 1.9.6如何处理数据包 1.10USB的四种传输类型 1.10.1...

    2. 文件IO1

    windows中称为文件句柄,还挺贴切创建一个文件描述符的代价极低,因为打开一个文件仅仅只是获取文件的元信息,例如当前文件写入的偏移量,文件状态等等但是进程会有

    linux epoll机制详解

    1.单个进程能够监视的文件描述符的数量存在最大限制,通常是1024,当然可以更改数量,但由于select采用轮询的方式扫描文件描述符,文件描述符数量越多,性能越差;(在linux内核头文件中,有这样的定义:#define __FD...

    opened:检查文件是否在Windows,macOS和Linux上的另一个应用程序中打开

    开了 检查文件是否在Windows,macOS和Linux上的另... 在Linux上(但在macOS上则不是), lsof需要sudo权限才能遍历用户的打开文件描述符,否则,不会检测到任何文件为打开状态,并且不会返回任何权限错误。 用法 var Op

    《Rootkits--Windows内核的安全防护》.(Hoglund).[PDF]&ckook;

    3.3.5 页表项 3.3.6 重要表的只读访问 3.3.7 多个进程使用多个页目录 3.3.8 进程和线程 3.4 内存描述符表 3.4.1 令局描述符表 3.4.2 本地描述符表 3.4.3 代码段 3.4.4 调用门 3.5 中断描述符表 3.6 系统服务调度表 ...

    Python中subprocess学习.docx

    Python中subprocess学习 subprocess的目的就是启动一个新的进程并且与之通信。 subprocess模块中只定义了一个类: Popen。可以使用Popen来创建进程,并与进程进行复杂的交互。...他们可以是PIPE,文件描述符

    unix-ipc-通过unix套接字对IPC的最小抽象-Rust开发

    unix-ipc此板条箱出于IPC的目的,在UNIX域套接字上实现了最低限度的抽象。 它允许您同时发送文件句柄和unix-ipc。为IPC的目的,此板条箱在UNIX域...它的工作方式是在序列化和反序列化期间跟踪遇到的文件描述符。 他们是

    Python多线程编程

    父进程打开的文件描述符和一些句柄不会被子进程继承。 该模式在三种模式中速度最慢 可以用于 Unix/Windows ,是Windows 上的默认方式 fork 模式:父进程使用os.fork() 来派生一个 python 解释器进程。子进程的代码...

    FxIce(系统安全辅助工具)

    查看当前系统描述符表。 12.消息钩子 这里面可能会有某些程序注入的DLL钩子,也可能会有键盘记录钩子。 13.IFEO 也就是映像劫持,虽然现在使用这招的程序已不多见,还是列举了出来。 14.文件管理 与Windows资源...

    API之网络函数---整理网络函数及功能

    其中包括文件、文件映射、进程、线程、安全和同步对象等 CompareFileTime 对比两个文件的时间 CopyFile 复制文件 CreateDirectory 创建一个新目录 CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及...

    libsquash:可移植的,由用户使用的SquashFS,可以轻松地链接和嵌入到您的应用程序中

    引入了虚拟文件描述符(vfd)作为后续libsquash操作的句柄。 vfd是通过dup(0)生成的,因此可以与该进程的其他普通文件描述符一起使用。 添加了新API,以反映常见系统调用的调用样式; 还添加了一个示例,介绍了...

    awesome-limits:操作系统系统限制的示例

    , , , , , , , , , , , , , 打开文件描述符/句柄。,, ,,, ,, ,, , , ,进程(pid)。 , , , 端口。 ,( ,( , TCP连接。 ( 线程。 ,熵池。,舍邦长。( 虚拟内存。 , 内核找到未...

    smmap:滑动内存映射管理器

    尽管内存映射具有许多优点,但是它们代表了非常有限的系统资源,因为每个映射都使用一个文件描述符,每个进程的文件描述符数量受到限制。 在32位系统上,您一次可以映射的内存量自然限于理论上的4GB内存,对于某些...

    寒江独钓-Windows内核安全编程(高清完整版).part7

    关于本书作者和贡献者 -20 前言 -18 阅读注意 -16 目录 -12 正文 1 第1章 内核上机指导 1 1.1 下载和使用WDK 2 1.1.1 下载安装WDK 2 1.1.2 编写第一个C文件 3 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个...

Global site tag (gtag.js) - Google Analytics