Board logo

标题: [其他] 求教深入浅出地解释句柄到底是什么 [打印本页]

作者: lyonamstrong    时间: 2016-9-14 15:05     标题: 求教深入浅出地解释句柄到底是什么

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

你可以理解为
句柄1就是JJ,句柄2就是菊花
这是有一个普遍规则的,1出来的肯定是尿尿,2出来的肯定是翔
所以你使用句柄1一般是输出到小便池,而狗狗知道蹲在句柄2后面等待
作者: 523066680    时间: 2016-9-14 17:15

本帖最后由 523066680 于 2016-9-14 17:26 编辑

句柄1就是任,句柄2就是督。结合二楼的内容,那么打通任督二脉就是……

正经的,在某些脚本语言中,比如Perl,可以通过句柄操作对象,比如输出信息的句柄:STDOUT,输入的句柄:STDIN 。
例:
STDOUT->autoflush(1); #设置自动刷新缓冲
$getInput = <STDIN>;  #获取终端或者管道输入

还有一种是文件句柄,可以自己定义一个标示符作为句柄,
open WRT, ">", "book.txt";
print WRT "abc";
close WRT;             #关闭句柄

我暂时这么描述:带有某种操作权限/特征的标识符,通过对这个标示符可以间接的操作指定的对象,以及句柄可以被传递。

实际对应的英文单词是 HANDLE,我觉得叫“把柄”更合适吧,造句:“哥抓住了一个文件的把柄”,可能是听上去有点猥琐就叫句柄咯。
轻喷。
作者: Batcher    时间: 2016-9-14 20:06

多看几遍:
http://bbs.bathome.net/thread-3296-1-1.html

如果哪天你找到“一看就懂”的文章,请给我分享一下
作者: codegay    时间: 2016-9-14 21:25

往后学,自然就是理解了。
但是想每一个概念都想弄清楚再学其它东西是不太可能的。
作者: CrLf    时间: 2016-9-14 22:18

回复 2# zz100001


    好…好有道理,我竟无言以对。
作者: idos    时间: 2016-9-15 09:54

就是句柄1指导正确输出,句柄2指导错误的输出,nul为空
1>nul  为将正确的输出到空设备,也就是不显示
2>nul  为将错误的输出到空设备,就是不显示
作者: lyonamstrong    时间: 2016-9-18 10:00

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

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

或者说这句echoyes 2>1有意义吗?
作者: DiamondbacK    时间: 2016-9-18 10:29

回复 8# lyonamstrong


echoyes 既不是内部命令,也不是外部命令,没有意义。
作者: lyonamstrong    时间: 2016-9-18 10:31

回复 9# DiamondbacK


这里写echoyes就是应该输出错误信息,那应该在句柄2,句柄2指向句柄1,只是想知道这样会产生什么结果。
作者: DiamondbacK    时间: 2016-9-18 10:42

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

回复 10# lyonamstrong


2>1 的含义并不是将句柄 2 重定向到句柄 1,而是将句柄 2 重定向到文件 1。
type 1 就会看到你生成的这个文件名为 "1" 的文件的内容。
作者: lyonamstrong    时间: 2016-9-18 11:57     标题: 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里面有内容,显示的是当前所在目录
作者: pcl_test    时间: 2016-9-18 12:23

回复 12# lyonamstrong

说明有其它程序或软件在占用a.txt,第一次运行后是不是没有退出?
作者: lyonamstrong    时间: 2016-9-18 12:33

回复 13# pcl_test


    但是为啥a.txt中有输入D:\也就是当前目录呢?
作者: pcl_test    时间: 2016-9-18 14:05

回复 14# lyonamstrong

把回显关了@echo off&Echo;>nul 3>a.txt
作者: lyonamstrong    时间: 2016-9-18 14:27

回复 15# pcl_test


    的确a.txt中是没有输入盘符了。但是这里是3>a.txt,句柄3里面应该是空的呀,怎么会有盘符呢。我好烦,好自责 orz
作者: lyonamstrong    时间: 2016-9-18 15:36     标题: 一个句柄复制的例子

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

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

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

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

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

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

回复 19# WHY


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




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2