版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、linux下自动telnet到远程主机上运行的脚本Kvlode发布于 2008-8-06 |495次阅读 字号:大中小(网友评论0条)我要评论用例:自动测试系统,自动编译完成后,需要能够自动在终端上运行,终端仅支持串口和telnet控制,其中telnet是比较理想的选择,只需要telnet过去后,自动完成交互的过程即可。方案:后台运行telnet,将标准输入重定向到管道,然后往管道中发交互命令。(管道的相关内容抽空看一下,必要的时候补篇文章)补充:虽然到的本例直接用shell脚本完成,但感觉主要内容在于telnet后台运行及管道,如有必要使用其它脚本比如最近在玩的lua等也可以实现,当然了,需
2、要用到一些exec。脚本:#=autotelnet.sh=#!/bin/bashtmptty=tty #取得当前的tty值tmptty=basename $tmptty #去掉tty的绝对路径tmpname=whoami #取得当前执行程序的用户名ip=4 #目标主机地址inp1=ABCM #主机的用户名,注意M必须在UNIX下用以下方法输入才能用!(VI下测试OK)#方法为按住ctrl键按v键,不放ctrl键,再按shift键和m键,完成后全部放开inp2=ABCM #主机的密码,注意必须有Minp3=lsM #其他进入后的命令,可无或用ls之类的命令代替,注意必须有Mi
3、np4=pwdM #命令4,同上#-inputfile=in #导入文件管道用的,不要改,这个值没有任何关系outputfile=out.log #最终导出的文件rm -fr $inputfilerm -fr $outputfilemknod $inputfile ptouch $outputfile#file description 7 for out and 8 for in 使用7作为输入管道,8作为输入exec 7$outputfileexec 8$inputfile#这句是关键,注意对于标准输入标准输出的重定向,和后台运行的&,以方便在后面telnet $ip &7 &sleep 2
4、; echo $inp1 $inputfile #等2秒,然后把inp1,也就是用户名+回车换行输入到输入管道sleep 2; echo $inp2 $inputfilesleep 2; echo $inp3 $inputfile #如果没有其他命令,这行和下一行可以去掉sleep 2; echo $inp4 $inputfiletail -f $outputfile & #强制在屏幕上显示任何输入输出#正常情况下已经进入目标主机了,可以输入任何命令,所有的一切输入输出都会被记录#以下这一段根据实际需要进行修改,如本用例中可进行等待某些事件后退出,不需要进行读入while truedoread
5、 str #读入一行if $str = quit | $str = exit #在远程执行这一行then echo $str $inputfile exitelse echo $str $inputfilefidone#退出时自动杀掉相关进程ps -ef | grep telnet | grep -v grep | grep -v telnetd | grep $tmptty | grep $tmpname | awk print kill -9, $2 | shps -ef | grep tail | grep -v grep | grep -v telnetd | grep $tmptty
6、 | grep $tmpname | awk print kill -9, $2 | sh#=脚本结束=linux shell I/O重定向2007-06-09 11:51实验test.sh#!/bin/bashif -t 0 ; thenecho okecho $11cat temp.txtelseecho badcat temp.txtfi当用exec 3 filename# 将fd(文件描述符)3的输入来自文件./test.sh file 标准输入(fd0)来自文件filecom file 标准输出(fd1)来自文件filecom file2 标准输入(fd0)来自文件file1 标准输
7、出(fd1)来自file2com1 |com2 com1的fd1 输入到com2的fd0com n file com的fdn 输出到filecom n&m com的fdn 输出到fdmcom nfileexec 1&3这样ls就自动写入file了当然也可以直接exec 1file问题:1怎么关闭fdnexec n&- 将n号输出关闭2关闭fd0 fd1 fd2 会怎么样fd0 关闭会退出shellfd1 关闭不会输出,当系统需要输出时,报错fd2 关闭时,shell死掉了3怎么打开fdnexec 1/dev/ttyexec 1&2都可以4输入到多个即 既输出到屏幕,有输出到文件。ls |tee
8、 filename1 filename2 .5怎么查看一个进程有多少个文件描述符?方法1 lsof -ppid方法2 ll /proc/pid/fd以上的pid均是该进程的pid号。6文件描述符会传到子shell之中?会的,子shell会继承父shell的文件描述符。7cat 2&1 1tmps 和 cat 1tmps 2&1 有什么区别使用当cat 1tmps 2&1ll /proc/4771/fd总计 4lrwx- 1 root root 64 06-19 21:00 0 - /dev/pts/4l-wx- 1 root root 64 06-19 21:00 1 - /root/tmps
9、l-wx- 1 root root 64 06-19 21:00 2 - /root/tmpslr-x- 1 root root 64 06-19 21:00 4 - /dev/null当cat 2&1 1tmps时ll /proc/4878/fd总计 4lrwx- 1 root root 64 06-19 21:22 0 - /dev/pts/4l-wx- 1 root root 64 06-19 21:22 1 - /root/tmpslrwx- 1 root root 64 06-19 21:22 2 - /dev/pts/4lr-x- 1 root root 64 06-19 21:2
10、2 4 - /dev/null发现了吧,第二个命令根本没有经fd2重定向到/root/tmps8关于/data/20070517192034/的简单例子的个人解释:(ls you no 2&1;ls yes 2&1) 2&1|egrep * file(ls you no 2&1;ls yes 2&1)|egrep * file(ls you no;ls yes) 2&1|egrep * file(一)bash(ksh)执行命令的过程:分析命令变量求值命令替代(和$( ))重定向通配符展开确定路径执行命令;(二)命令行处理时,从左到右,依次执行重
11、定向。第一个(ls you no 2&1;ls yes 2&1) 2&1|egrep * fileshell先执行()里边的,并将标准错误重定向的标准输出,执行完毕后,输出的流内,包含括号里边命令的标准输出,标准错误。所以在外边的2&1可以不需要,这样第一个和第二个是一样效果,第三个,()里边的执行完毕后,则将括号里边命令的标准输出,标准错误都输出,但不合并。所以要加上2&1比较一下:(ls you no 2&1) 1&2|egrep * file # 送到 monitorls you no 2&1 1&2|egrep * file # 送给 管道 “|”ls you no 1&2 2&1|e
12、grep * file # 送到 monitor(ls you no 2&1) 1&2|egrep * file # 送到 monitor - (1)这个和(ls you no 2&1;ls yes 2&1) 2&1|egrep * file -(2)的区别在于:(1)在1&2后,假设这个重定向之前的 fd1是/dev/pts/1fd2是/dev/pts/2,在这个重定向后,fd1就是/dev/pts/2了,而|却要求从|前边命令的/dev/pts/1到egrep的fd0,即它的标准输入要求是设备。(2)的标准输出设备并没有发生变化。ls you no 2&1 1&2|egrep * file
13、 却输入到了管道。shell从左到右执行重定向,先执行2&1 还是沿用上一个假设,2&1后,fd2为/dev/pts/1,fd1是/dev/pts/1 ,再执行 1&2 ,这时的 fd2为dev/pts/1fd1是/dev/pts/1,还是该设备,故|将数据流传到后边的命令。ls you no 1&2 2&1|egrep * file1&2 fd2为/dev/pts/2 fd1为/dev/pts/2 这时fd1已经改变了,并且这种改变会影响后边的重定向, 2&1 后 fd2为/dev/pts/2 fd1为/dev/pts/2 ,即数据流从/dev/pts/2输出了。而|等待/dev/pts/1
14、的数据流,当热什么都没有接受到。url:/data/20070517192034/shell基础:输入和输出(echo,read,cat,管道,tee,重定向等)实验环境:Redhat 9.0,Redhat EL AS 4.0echo:-在LINUX中,要使转义符生效,需加参数-e从echo的变量开始说起如:echo命令输出转义符以及变量# echo -e 007your home is $HOME , you are connected on ttyyour home is /root , you are connected on /dev/
15、pts/1# echo -e ayour home is $HOME , you are connected on ttyyour home is /root , you are connected on /dev/pts/1#本例中007或a你可以让终端铃响一声,显示出$HOME目录,并且可以让系统执行tty命令(注意,该命令用键盘左上角的符号,不是单引号)在echo命令输出之后附加换行,可以使用 n选项:$cat echod#!/bin/shecho -e this echos 3 new linesnnnecho OK运行输出如下:$ ./echodthis echos 3 new li
16、nesOK$在e c h o语句中使用跳格符,记住别忘了加反斜杠:$ echo -e here is a tabthere are two tabsttokhere is a tab here are two tabs ok$把一个字符串输出到文件中,使用重定向符号。在下面的例子中一个字符串被重定向到一个名为myfile的文件中:$ echo The log files have all been done myfile或者可以追加到一个文件的末尾,这意味着不覆盖原有的内容:$ echo $LOGNAME carried them out at datemyfile现在让我们看一下myfile
17、文件中的内容:The log files have all been donesam carried them out at 六 11月 13 12:54:32 CST 2004引号是一个特殊字符,所以必须要使用反斜杠来使shell忽略它的特殊含义。假设你希望使用echo命令输出这样的字符串:“/dev/rmt0”,那么我们只要在引号前面加上反斜杠即可:$ echo /dev/rmt0/dev/rmt0$read:-samchenwy sam$vi var_test#!/bin/sh#var_testecho -e First Name :cread firstecho -e Middle N
18、ame :cread middleecho -e Last name :cread lastecho $first $middle $lastrootfirst # read a b c d1 2 3 4rootfirst # echo $a1rootfirst # echo $b2rootfirst # echo $c3rootfirst # echo $d4rootfirst # echo $a $b $c $d1 2 3 4这是在man bash中的一段:read -ers -u fd -t timeout -a aname -p prompt -n nchars -d delim na
19、me . Onelineisreadfromthestandard input, or from the file descriptor fd supplied as an argument to the -u option, andthe first word is assigned to the first name, the second word to the second name, and so on, with leftover words and theirinterveningseparatorsassignedto the last name.If there are fe
20、wer words read from the input stream than names, the remaining names areassignedemptyvalues.The characters in IFS are used to split the line into words.The backslash character ()maybe usedtoremove any special meaning for the next character read and for line continuation.Options, if supplied, have th
21、efollowing meanings: -a aname The words are assigned to sequential indices of the array variable aname, starting at 0.aname is unset before any newvaluesareassigned. Othernameargumentsare ignored. -d delim The first character of delim isusedtoterminatethe input line, rather than newline. -e If the s
22、tandard input is coming from a terminal, readline (see READLINE above) is used to obtain the line. -n nchars read returns after reading nchars characters ratherthan waiting for a complete line of input. -p prompt Display prompt on standard error, without a trailing newline, before attempting to read
23、 any input.The prompt is displayed only if input is coming from a terminal. -r Backslash does not act as an escape character.The backslash is considered to be part of the line.Inparticular,abackslash-newline pair may not be used as a line continuation. -s Silent mode.If input is coming from a termin
24、al, characters are not echoed. -t timeout Causereadto time out and return failure if a complete line of input is not read within timeoutseconds.This optionhasnoeffect if read is not reading input from the terminal or a pipe. -u fdRead input from file descriptor fd. If no names are supplied, the line
25、 read is assigned to the ariableREPLY. Thereturncodeis zero, unless end-of-file is ncountered, read times out, or an invalidfiledescriptoris supplied as the argument to -u.read -p how old r u? ageecho $ageread -p some words? -a wordsecho $words*read -p Password: -s passwd echo $passwdread -t 5 authe
26、cho $authread -n 1 keyread -dq -p input something end with q: menuread -e file #在这试试命令历史和补齐功能cat:-cat:显示文件内容,创建文件,还可以用它来显示控制字符。注意:在文件分页符处不会停下来;会一下显示完整个文件。因此,可以使用more命令或把pg命令的输出通过管道传递到另外一个具有分页功能的命令中,使用命令less file可实现相同的功能。如下形式$ cat myfile | more 或 $ cat myfile | pgcat命令的一般形式为:cat options filename1 . f
27、ilename2 .1、显示名为myfile的文件:$ cat myfile2、显示myfile1、myfile2、myfile3这三个文件,可以用:$ cat myfile1 myfile2 myfile33、创建一个包含上述三个文件的内容,名为bigfile的文件,可以用输出重定向到新文件中:$ cat myfile1 myfile2 myfile3 bigfile4、如果cat的命令行中没有参数,输入的每一行都立刻被cat命令输出到屏幕上,输入完毕后按结束$ catHello worldHello world$5、新建文件$cat myfileThis is great$cat myfi
28、leThis is greatcat:参数选项使用方式:cat -AbeEnstTuv -help -version fileName说明:把档案串连接后传到基本输出(萤幕或加 fileName 到另一个档案)-n 或 -number 由 1 开始对所有输出的行数编号-b 或 -number-nonblank 和 -n 相似,只不过对于空白行不编号-s 或 -squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行-v 或 -show-nonprinting 显示非打印字符cat 还可以在您查看包含如制表符这样的非打印字符的文件时起帮助作用。您可以用以下选项来显示制表符:
29、* -T 将制表符显示为 I* -v 显示非打印字符,除了换行符和制表符,它们使用各自效果相当的“控制序列”。例如,当您处理一个在 Windows 系统中生成的文件时,这个文件将使用 Control-M(M)来标记行的结束。对于代码大于 127 的字符,它们的前面将会被加上 M-(表示“meta”),这与其它系统中在字符前面加上 Alt- 相当。* -E 在每一行的结束处添加美元符($)。tee:-tee:读取标准输入的数据,并将其内容输出成文件。语 法:tee -ai-help-version文件补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。我们可
30、利用tee把管道导入的数据存成文件,甚至一次保存数份文件。参 数:-a 附加到既有文件的面,而非覆盖它。如果给予tee指令的文件名称已经存在,预设会覆盖该文件的内容。加上此参数,数据会新增在该文件内容的最面,而不会删除原先之内容。-i 忽略中断信号-help 在线帮助-version 显示版本信息列出文本文件slayers.story的内容,同时复制3份副本,文件名称分别为ss-copy1、ss-copy2、ss-copy3:$ cat slayers.story |tee ss-copy1 ss-copy2 ss-copy3把列出当前目录,并把结果结到myfile里$ ls -l |tee
31、myfile管道:可以通过管道把一个命令的输出传递给另一个命令作为输入。管道用竖杠|表示。它的一般形式为命令1 |命令2其中|是管道符号。标准输入、输出和错误当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名。下面就是这些文件描述符及它们通常所对应的文件名:文件文件描述符输入文件标准输入0:它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。输出文件标准输出1:它是命令的输出,缺省是屏幕,也可以是文件。错误输出文件标准错误2:这是命令错误的输出,缺省是屏幕,同样也可以是文件。在
32、执行命令时,可以指定命令的标准输入、输出和错误,要实现这一点就需要使用文件重定向。下面列出了最常用的重定向组合,并给出了相应的文件描述符。在对标准错误进行重定向时,必须要使用文件描述符,但是对于标准输入和输出来说,这不是必需的。常用文件重定向命令:command filename 把标准输出重定向到一个新文件中command filename 把标准输出重定向到一个文件中(追加)command 1 fielname 把标准输出重定向到一个文件中command filename 2&1 把标准输出和标准错误一起重定向到一个文件中command 2 filename 把标准错误重定向到一个文件中c
33、ommand 2 filename 把标准输出重定向到一个文件中(追加)command filename 2&1 把标准输出和标准错误一起重定向到一个文件中(追加)command filename2 把command命令以filename文件作为标准输入,以filename 2文件作为标准输出command filename 把command命令以filename文件作为标准输入command delimiter 把从标准输入中读入,直至遇到d e l i m i t e r分界符command &m 把把标准输出重定向到文件描述符m中command tty(终端设备的统称):tty一词源于T
34、eletypes,或teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘和显示器取代,所以现在叫终端比较合适。终端是一种字符型设备,他有多种类型,通常使用tty来简称各种类型的终端设备。2 pty(虚拟终端):但是假如我们远程telnet到主机或使用xterm时不也需要一个终端交互么?是的,这就是虚拟终端pty(pseudo-tty)3 pts/ptmx(pts/ptmx结合使用,进而实现pty):pts(pseudo-terminal slave)是pty的实现方法,和ptmx(pseudo-terminal master)
35、配合使用实现pty。Linux终端:在Linux系统的设备特别文档目录/dev/下,终端特别设备文档一般有以下几种:1、串行端口终端(/dev/ttySn)串行端口终端(Serial PortTerminal)是使用电脑串行端口连接的终端设备。电脑把每个串行端口都看作是个字符设备。有段时间这些串行端口设备通常被称为终端设备,因为那时他的最大用途就是用来连接终端。这些串行端口所对应的设备名称是/dev/tts/0(或/dev/ttyS0),/dev/tts/1(或/dev/ttyS1)等,设备号分别是(4,0),(4,1)等,分别对应于DOS系统下的COM1、COM2等。若要向一个端口发送数据,
36、能够在命令行上把标准输出重定向到这些特别文档名上即可。例如,在命令行提示符下键入:echo test /dev/ttyS1会把单词”test”发送到连接在ttyS1(COM2)端口的设备上。可接串口来实验。2、伪终端(/dev/pty/)伪终端(Pseudo Terminal)是成对的逻辑终端设备(即master和slave设备, 对master的操作会反映到slave上)。例如/dev/ptyp3和/dev/ttyp3(或在设备文档系统中分别是/dev/pty/m3和/dev/pty/s3)。他们和实际物理设备并不直接相关。假如一个程式把ptyp3(master设备)看作是个串行端口设备,则
37、他对该端口的读/写操作会反映在该逻辑终端设备对应的另一个ttyp3(slave设备)上面。而ttyp3则是另一个程式用于读写操作的逻辑设备。这样,两个程式就能够通过这种逻辑设备进行互相交流,而其中一个使用ttyp3的程式则认为自己正在和一个串行端口进行通信。这很象是逻辑设备对之间的管道操作。对于ttyp3(s3),任何设计成使用一个串行端口设备的程式都能够使用该逻辑设备。但对于使用ptyp3的程式,则需要专门设计来使用ptyp3(m3)逻辑设备。例如,假如某人在网上使用telnet程式连接到您的电脑上,则telnet程式就可能会开始连接到设备ptyp2(m2)上(一个伪终端端口上)。此时一个g
38、etty程式就应该运行在对应的ttyp2(s2)端口上。当telnet从远端获取了一个字符时,该字符就会通过m2、s2传递给getty程式,而getty程式就会通过s2、m2和telnet程式往网络上返回”login:”字符串信息。这样,登录程式和telnet程式就通过“伪终端”进行通信。通过使用适当的软件,就能够把两个甚至多个伪终端设备连接到同一个物理串行端口上。在使用设备文档系统(devicefilesystem)之前,为了得到大量的伪终端设备特别文档,使用了比较复杂的文档名命名方式。因为只存在16个ttyp(ttyp0ttypf)的设备文档,为了得到更多的逻辑设备对,就使用了象q、r、s
39、等字符来代替p。例如,ttys8和ptys8就是个伪终端设备对。但是这种命名方式现在仍然在RedHat等Linux系统中使用着。但Linux系统上的Unix98并不使用上述方法,而使用了”ptymaster”方式,例如/dev/ptm3。他的对应端则会被自动地创建成/dev/pts/3。这样就能够在需要时提供一个pty伪终端。目录/dev/pts是个类型为devpts的文档系统,并且能够在被加载文档系统列表中看到。虽然“文档”/dev/pts/3看上去是设备文档系统中的一项,但其实他完全是一种不同的文档系统。即: TELNET - TTYP3(S3: slave) - PTYP3(M3: ma
40、ster) - GETTY=实验:1、在X下打开一个或N个终端窗口2、#ls /dev/pt*3、关闭这个X下的终端窗口,再次运行;比较两次输出信息就明白了。在RHEL4环境下: 输出为/dev/ptmx /dev/pts/1存在一(master)对多(slave)的情况=3、控制终端(/dev/tty)如果当前进程有控制终端(ControllingTerminal)的话,那么/dev/tty就是当前进程的控制终端的设备特别文档。能够使用命令”psax”来查看进程和哪个控制终端相连。对于您登录的shell,/dev/tty就是您使用的终端,设备号是(5,0)。使用命令”tty”能够查看他具体对
41、应哪个实际终端设备。/dev/tty有些类似于到实际所使用终端设备的一个联接。4、控制台终端(/dev/ttyn, /dev/console)在Linux系统中,电脑显示器通常被称为控制台终端(Console)。他仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设备特别文档和之相关联:tty0、tty1、tty2等。当您在控制台上登录时,使用的是tty1。使用Alt+F1F6组合键时,我们就能够转换到tty2、tty3等上面去。tty1tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上(这时也叫控制台终端)。因此不管当前正在
42、使用哪个虚拟终端,系统信息都会发送到控制台终端上。您能够登录到不同的虚拟终端上去,因而能够让系统同时有几个不同的会话期存在。只有系统或终极用户root能够向/dev/tty0进行写操作 即下例:1、# tty(查看当前TTY)/dev/tty12、#echo test tty0 /dev/tty0test tty05 虚拟终端(/dev/pts/n)在Xwindows模式下的伪终端.6 其他类型Linux系统中还针对很多不同的字符设备存在有很多其他种类的终端设备特别文档。例如针对ISDN设备的/dev/ttyIn终端设备等。这里不再赘述。FAQ: 终端和控制台Q:/dev/console 是什
43、么?A:/dev/console即控制台,是和操作系统交互的设备,系统将一些信息直接输出到控制台上。现在只有在单用户模式下,才允许用户登录控制台。Q:/dev/tty是什么?A:tty设备包括虚拟控制台,串口连同伪终端设备。/dev/tty代表当前tty设备,在当前的终端中输入 echo “hello” /dev/tty ,都会直接显示在当前的终端中。Q:/dev/ttyS*是什么?A:/dev/ttyS*是串行终端设备。Q:/dev/pty*是什么?A:/dev/pty*即伪终端,所谓伪终端是逻辑上的终端设备,多用于模拟终端程式。例如,我们在X Window下打开的终端,连同我们在Windo
44、ws使用telnet 或ssh等方式登录Linux主机,此时均在使用pty设备(准确的说在使用pty从设备)。Q:/dev/tty0和/dev/tty1 /dev/tty63是什么?他们之间有什么区分?A:/dev/tty0代表当前虚拟控制台,而/dev/tty1等代表第一个虚拟控制台,例如当使用ALT+F2进行转换时,系统的虚拟控制台为/dev/tty2 ,当前的控制台则指向/dev/tty2Q:怎样确定当前所在的终端(或控制台)?A:使用tty命令能够确定当前的终端或控制台。Q:/dev/console是到/dev/tty0的符号链接吗?A:现在的大多数文本中都称/dev/console是
45、到/dev/tty0的链接(包括Linux内核源代码情景分析),但是这样说是不确切的。根据内核文档,在2.1.71之前,/dev/console根据不同系统的设定能够链接到/dev/tty0或其他tty上,在2.1.71版本之后则完全由内核控制。现在,只有在单用户模式下能够登录/dev/console(能够在单用户模式下输入tty命令进行确认)。Q:/dev/tty0和/dev/fb*有什么区分?A: 在Framebuffer设备没有启用的系统中,能够使用/dev/tty0访问显卡。Q:关于终端和控制台的区分能够参考哪些文本A:能够参考内核文档中的 Documents/devices.txt
46、中关于”TERMINAL DEVICES”的章节。另外,Linux内核源代码情景分析的8.7节 连同Operating Systems : Design andImplementation中的3.9节(第3版中为3.8节)都对终端设备的概念和历史做了很好的介绍。另外在ModernOperating system中也有对终端设备的介绍,由于和Operating Systems : Design andImplementation的作者相同,所以文本内容也大致相同。需要注意的一点是Operating Systems : Designand Implementation中将终端设备分为3类,而Mod
47、ern Operatingsystem将终端硬件设备分为2类,差别在于前者将 X Terminal作为一个类别。PS:只有2410的2.6才叫ttySAC0,9200等的还是叫ttyS0windows下printf重定向的实现收藏(原创,欢迎转载,请注明出处)最近我们有一个需求,要求将windows控制台程序中通过printf打印的字符串信息全部重定向到另一个远程控制终端上去;并且也将标准输入也重定向到远程终端。重定向信息的传输用TCP传输。解决这个问题,其实就是要求能够截获printf的字符数据,使其不在控制台上打印,而是通过socket传到远程终端后打印。并且将标准输入重定向到一个socket上,从上面阻塞收数据作为标准输入。解决过程:1. 当然是到网上找答案了。的确发现有不少兄弟跟我们有同样的需求。搜到了与之相关的三种解决方案。 用freopen可以将标准输出可以重定向到一个打开的文件中。调用该函数后就可以将printf的数据自动写入到一个文件中了。这种方法确实实现了标准输出的重定向,但是总不能让我反复的读文件,再把数据通过socket发出去吧。 用SetStdHandle重定向标准输入和输出。大家都找
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年环保技术改造无息借款合同范本3篇
- 2024年研发团队领导长期服务合同3篇
- 2024年详尽版:装潢设计施工多方合同范本3篇
- 婚庆行业客服工作总结
- 2024年绿色建筑植物墙项目合作合同3篇
- 商品展示中心前台工作总结
- 心内科护理工作总结
- 艺术教育与审美能力培养计划
- 酒店管理的VIP客户关系维护
- 《贵州会展》课件
- 《中考体育项目跳绳》教案
- 增服叶酸预防神经管缺陷理论知识考核试题及答案
- 新业娱乐安全评价报告
- 医保工作自查表
- 调休单、加班申请单
- 小学-英语-湘少版-01-Unit1-What-does-she-look-like课件
- 单证管理岗工作总结与计划
- 安全安全隐患整改通知单及回复
- 国有检验检测机构员工激励模式探索
- 采购部年终总结计划PPT模板
- CDI-EM60系列变频调速器使用说明书
评论
0/150
提交评论