句柄

计算机中的“句柄”到底是啥意思呢

三世轮回 提交于 2019-12-05 14:08:23
https://www.cnblogs.com/Nick-Hu/p/7154197.html 里提到: 所谓句柄,实际上是一个数据,是一个 long (长整型)的数据。句柄是windows用来标识被应用程序所建立或使用的对象的唯一整数。 但是人家想了解的是,linux 中的句柄又是啥意思呢? https://www.orchome.com/518 1. 句柄就是一个标识符,只要获得对象的句柄,我们就可以对对象进行任意的操作。 2. 句柄不是指针,操作系统用句柄可以找到一块内存,这个句柄可能是标识符,map的key, 也可能是指针,看操作系统怎么处理的了。fd算是在某种程度上替代句柄吧;linux 有相应机制,但没有统一的句柄类型,各种类型的系统资源由各自的类型来标识,由各自的接口操作。 粗暴的解释: 最早的windows开发书籍,handle 是被翻译成 “把手” 的。虽然不好听,但是个人认为非常传神。 虽然你握住的只是把手,却能拉动整扇门,而且你根本不用在意那门长什么样子 一扇门如果有多个把手,被不同的人(进程)握住,门往哪儿走就不好说了 设计这么一个句柄的原因在于 句柄可以防止用户随意读写操作系统内核的文件对象 。 无论是linux 还是windows, 文件句柄总是和内核的文件对象相关联的,但如何关联细节用户并不可见。内核可以通过句柄计算出内核文件对象的地址

WinDbg常用命令系列---!handle

血红的双手。 提交于 2019-12-05 09:03:24
!handle 简介 !handle扩展显示有关目标系统中一个或所有进程拥有的一个或多个句柄的信息。 使用形式 用户模式 !handle [ Handle [ UMFlags [ TypeName ]]] !handle -? 内核模式 !handle [ Handle [ KMFlags [ Process [ TypeName ]]]] 参数 Handle 指定要显示的句柄的索引。如果Handle为-1或省略此参数,调试器将显示与当前进程关联的所有句柄的数据。如果句柄为0,调试器将显示所有句柄的数据。 UMFlags (仅限用户模式)指定显示内容。此参数可以是以下任何位值的总和。(默认值为0x1。)| 位 0 (0x1) 显示句柄类型信息。 位 1 (0x2) 显示基本句柄信息。 位 2 (0x4) 显示句柄名称信息。 位 3 (0x8) 显示特定于对象的句柄信息 (如果可用)。 KMFlags (仅限内核模式)指定显示内容。此参数可以是以下任何位值的总和。(默认值为0x3。) 位 0 (0x1) 显示基本句柄信息。 位 1 (0x2) 显示有关对象的信息。 位 2 (0x4) 显示可用的句柄项。 如果未设置此位并且省略了 句柄 或将其设置为零, 则显示的句柄列表不包含可用的句柄。 如果 handle 指定单个自由句柄, 则即使未设置此位, 也会显示该句柄。 位 4 (0x10

linux下阻塞与非阻塞

旧巷老猫 提交于 2019-12-05 06:40:28
1\阻塞与非阻塞由应用层传递flag,驱动层根据flag进行相应的操作,其实现本质还是在驱动层,如果阻塞模式则应用层在open时传入阻塞 参数. 在read数据时,若底层数据尚未准备好,则驱动层就会进行休眠.知道有数据时驱动层此时才会操作/dev/xx设备,对于应用层而言此时才能在/dev/xx对应的文件句柄读取到数据.(如果是select机制则对应得该句柄就会置位) 2\应用层的select/poll/epoll机制与驱动层阻塞与非阻塞无关系,这是应用层实现的一套文件句柄监测机制,当句柄发生变化那么驱动层肯定是有数据反回来. https://www.cnblogs.com/lialong1st/p/7756671.html https://www.cnblogs.com/amanlikethis/p/6913376.html https://blog.csdn.net/weixin_43971252/article/details/90177691 来源: https://www.cnblogs.com/retry/p/11911109.html

python基础-文件操作

放肆的年华 提交于 2019-12-05 06:29:44
一 介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分。 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件, 众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用 程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永 久保存下来。 有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程: #1. 打开文件,得到文件句柄并赋值给一个变量 #2. 通过句柄对文件进行操作 #3. 关闭文件 二 在python中 #1. 打开文件,得到文件句柄并赋值给一个变量 f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r #2. 通过句柄对文件进行操作 data=f.read() #3. 关闭文件 f.close() 三 f=open('a.txt','r')的过程分析 #1、由应用程序向操作系统发起系统调用open(...) #2、操作系统打开该文件,并返回一个文件句柄给应用程序 #3、应用程序将文件句柄赋值给变量f #强调第一点: 打开一个文件包含两部分资源:操作系统级打开的文件+应用程序的变量。在操作完毕一个文件时

Zookeeper开发常见问题

﹥>﹥吖頭↗ 提交于 2019-12-05 05:11:46
背景与目的 Zookeeper开发过程中遇到一些常见问题,为了后续开发不犯同样的错误,总结一下此类问题,并进行分析和解决。 适合人员 主要适合zookeeper开发、测试及运维相关人员。 问题与解决 一、 关于zookeeper_init函数的使用 问题描述: 开发人员在调用zookeeper_init函数时,若返回一个非空句柄zhandle_t *zh,则认为初始化成功,这样可能会导致后续操作失败。 问题分析: zhandle_t *zookeeper_init(const char *host, watcher_fn fn, int recv_timeout,const clientid_t *clientid, void *context, int flags) 函 数 返回一个zookeeper客户端与服务器通信的句柄,通常我们仅仅根据返回句柄情况来判断zookeeper 客户端与zookeeper服务器是否 建立连接。如果句柄为空则认为是失败,非空则成功。其实不然,zookeeper_init创建与ZooKeeper服务端通信的句柄以及对应于此句柄的会话,而会话的创建是一个异步的过程,仅当会话建立成功,zookeeper_init才返回一个可用句柄。 问题解决: 如何正确判断zookeepr_init初始化成功,可通过以下三种方式 1、判断句柄的state是否为ZOO

RPC 远程过程调用协议

主宰稳场 提交于 2019-12-05 00:40:34
远程过程调用协议 编辑 同义词 RPC 一般指远程过程调用协议 RPC(Remote Procedure Call Protocol)—— 远程过程调用 协议,它是一种通过 网络 从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 RPC协议 假定某些 传输协议 的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI 网络通信 模型中,RPC跨越了 传输层 和 应用层 。RPC使得开发包括网络 分布式 多程序在内的应用程序更加容易。 RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复 信息 ,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。 有多种 RPC模式和执行。最初由 Sun 公司提出。IETF ONC 宪章重新修订了 Sun 版本,使得 ONC RPC 协议成为 IETF 标准协议。现在使用最普遍的模式和执行是开放式软件基础的分布式计算 环境 (DCE)。 中文名 远程过程调用协议 外文名 Remote Procedure Call Protocol 核心思想 信息传输协议 研究方向 分布式

python+selenium元素定位方法

妖精的绣舞 提交于 2019-12-05 00:14:27
8种定位方法 1、 id 定位 find_element_by_id() 2、 name定位 find_element_by_name() 3、 class name定位 find_element_by_class_name() 4、tag name定位 find_element_by_tag_name() /一般都找不到元素,作为了解 5、link text定位 find_element_by_link_text()/超链接 6、partial link text 定位 find_element_by_partial_link_text()/部分超链接 7、 xpath定位 find_element_by_xpath()/以上的方法不好找,就用以下这两个 8、css selector定位 find_element_by_css_selector() 以上找不到就是Frame不对,需要切换Frame 1.frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe会影响selenium定位; selenium提供了 switch_to.frame() 方法来切入frame; switch_to.frame(reference) reference是传入的参数,用来定位frame,可以传入id

切换窗口

妖精的绣舞 提交于 2019-12-04 20:29:57
在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作。 WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换。 以百度首页和百度注册页为例,在两个窗口之间的切换如下图。 from selenium import webdriver import time driver = webdriver.Firefox() driver.implicitly_wait(10) driver.get("http://www.baidu.com") # 获得百度搜索窗口句柄 sreach_windows = driver.current_window_handle driver.find_element_by_link_text('登录').click() driver.find_element_by_link_text("立即注册").click() # 获得当前所有打开的窗口的句柄 all_handles = driver.window_handles # 进入注册窗口 for handle in all_handles: if handle != sreach_windows: driver.switch_to.window(handle) print('now register window!')

windows中的句柄

早过忘川 提交于 2019-12-04 14:00:26
指使用的一个唯一的整数值,来标识 应用程序 中的不同 对象 和同类中的不同的实例 , 诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。 windows 之所以要设立句柄,根本上源于内存管理机制的问题— 虚拟地址 ,简而言之数据的地址需要变动,变动以后就需要有人来记录管理变动,(就好像户籍管理一样),因此系统用句柄来记载数据地址的变更。 有些数据(例如不常用的数据会为常用数据让出其占用的内存空间,进而被淘汰进硬盘虚拟内存之中)的物理地址总是变动的,系统为进程分配固定的地址(句柄)来存储进程下的数据对象变化后的地址。 Unix中的文件描述符基本上也属于句柄。 来源: https://www.cnblogs.com/Stephen-Qin/p/11869378.html

Windows用户模式调试内部组件

ε祈祈猫儿з 提交于 2019-12-04 09:44:58
简介 允许用户模式调试工作的内部机制很少得到充分的解释。更糟糕的是,这些机制在Windows XP中已经发生了根本性的变化,当许多支持被重新编写时,还通过将ntdll中的大多数例程作为本地API的一部分,使更多的子系统变得可移植。希望读者对C和通用NT内核体系结构和语义有一些基本的了解。此外,这并不是介绍什么是调试或如何编写调试器。它可以作为经验丰富的调试器编写人员或好奇的安全专家的参考。 Win32 Debugging NT的Win32子系统从第一个版本开始就允许对进程进行调试,随后的版本添加了更多与符号和其他PE信息相关的特性和调试帮助库。但是,对于外部API用户来说,除了在Windows XP中添加的停止调试进程而不杀死进程的功能之外,其他的变化相对较少。NT的这个版本还包含了对底层实现的几次彻底检查,我们将对此进行详细讨论。但是,这些更改的一个重要副作用是不再使用LPC(和csrss.exe),这允许调试这个二进制文件(以前,调试这个二进制文件是不可能的,因为它负责处理内核到用户的通知)。 处理调试进程的基本win32api很简单:DebugActiveProcess,to attach,WaitForDebugEvent,等待调试事件的出现,以便调试可以处理它们,ContinueDebugEvent,恢复线程执行。WindowsXP的发布增加了三个更有用的API