[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 求教深入浅出地解释句柄到底是什么

请教达人,句柄到底是什么?对这个完全没概念。
怎样说能完全说清楚,一看就懂就明白。谢谢。
BTW,别扣分,搜过了,相关资料寥寥无几 orz

回复 19# WHY


    如果无法回答此问题,也请你保持理智

TOP

学啥东西都得从易到难,由简入繁
如果连批处理基本的句法、语法都没搞清楚,就去钻研啥子“句柄复制”、“句柄占用”,我敢保证,不出两星期,lz就会觉得批处理太难学而放弃。

TOP

本帖最后由 Bella 于 2016-9-19 22:39 编辑

这种问题请看en.wikipedia.org
我来归纳一下:
句柄是一种指向资源的ID, 包括FD, PID, sockets ...
FD = file descriptor 文件描述符 (0,1,2)
标准流是预连接的I/O通道, FD是3种标准流的ID

TOP

一个句柄复制的例子

本帖最后由 lyonamstrong 于 2016-9-18 15:42 编辑

比如在D:\下跑这条命令
1>a.txt 1>&3 3>&2 echoyes
为什么没有生成a.txt?

难道说echoyes的错误信息只会出现在句柄2?
句柄0-2之间是不能复制的?可是把两个1换成5,效果一样……

TOP

回复 15# pcl_test


    的确a.txt中是没有输入盘符了。但是这里是3>a.txt,句柄3里面应该是空的呀,怎么会有盘符呢。我好烦,好自责 orz

TOP

回复 14# lyonamstrong

把回显关了@echo off&Echo;>nul 3>a.txt

TOP

回复 13# pcl_test


    但是为啥a.txt中有输入D:\也就是当前目录呢?

TOP

回复 12# lyonamstrong

说明有其它程序或软件在占用a.txt,第一次运行后是不是没有退出?

TOP

Echo;>nul 3>a.txt

这句难道不是
输入空格到空设备,所以不回显
然后句柄3重定向到a.txt也就是生成了一个a.txt文件
但是由于句柄3是空
所以a.txt内容为空

为什么再次运行这行时显示The process cannot access the file because it is being used by another process.
打开a.txt里面有内容,显示的是当前所在目录

TOP

本帖最后由 DiamondbacK 于 2016-9-18 10:48 编辑

回复 10# lyonamstrong


2>1 的含义并不是将句柄 2 重定向到句柄 1,而是将句柄 2 重定向到文件 1。
type 1 就会看到你生成的这个文件名为 "1" 的文件的内容。

TOP

回复 9# DiamondbacK


这里写echoyes就是应该输出错误信息,那应该在句柄2,句柄2指向句柄1,只是想知道这样会产生什么结果。

TOP

回复 8# lyonamstrong


echoyes 既不是内部命令,也不是外部命令,没有意义。

TOP

本帖最后由 lyonamstrong 于 2016-9-18 10:10 编辑

那请问
echoyes 2>1
结果是错误信息没有输出,是什么原因?
按道理2和1的指向都是con,为什么不能输出?

或者说这句echoyes 2>1有意义吗?

TOP

就是句柄1指导正确输出,句柄2指导错误的输出,nul为空
1>nul  为将正确的输出到空设备,也就是不显示
2>nul  为将错误的输出到空设备,就是不显示

TOP

返回列表