当前位置:文档之家› 输入输出重定向

输入输出重定向

输入输出重定向
输入输出重定向

大三上学期UNIX复习

一.单项选择题(每小题1分,共20分) 1.操作系统是一种( B )。 A.通用软件B.系统软件C.应用软件D.软件包 2.用来查找特定字符串的命令是(A)。 A.find B.whereis C.grep D.which 3. 要把消息回复给指定的用户, 在mail模式下,输入( A )。 A.r usrname B.R usrname C.s usrname D.m usrname 4.C SHELL命令提示符为( A )。 A.% B.$ C.> D.# 5.修改口令的命令是( B )。 A.who B.passwd C.password D.pwd 6.对正则表达式efg*i下列不匹配的是( C )。 A.efgi B.efggi C.efghi D.efggggi 7.高级语言不具有以下哪个选项的特点。( B )。 A.通用性强B.直接执行C.便于移植D.兼容性好8.执行带输出重定向符的( D )命令可以创建文件。 A.ls B.mkdir C.cd D.cat 9.扩展符\r 含义是( C ) A.回车并换新行B.退格C.回车,但不换新行D.制表符10.显示abc.txt文件前5行的命令是( A )。 A、head -5 abc.txt B、head +5 abc.txt C、tail -5 abc.txt D、tail -f 5 abc.txt 11.在进程管理中,当( C )时,进程从阻塞状态变为就绪状态。 A.进程被进程调度程序选中B.等待某一事件 C.等待的事件发生D.时间片用完 12.要编译C程序,在命令提示符输入( B )。 A.c程序名B.cc -o c程序名C.ccc c程序名D.cc c程序名13.在Linux环境下,要改变当前工作目录,应使用( B )命令。 A、ls B、cd C、pwd D、ps 14.操作系统通过( B )对进程进行管理。 A.进程B.进程控制块C.进程启动程序D.进程控制区

管道与重定向

管道命令操作符是:”|”,它仅能处理经由前面一个指令传出的正确输出信息,也就是standard output 的信息,对于stdandard error 信息没有直接处理能力。然后,传递给下一个命令,作为标准的输入standard input. 先看下下面图: command1正确输出,作为command2的输入然后comand2的输出作为,comand3的输入,comand3输出就会直接显示在屏幕上面了。 通过管道之后:comand1,comand2的正确输出不显示在屏幕上面 注意: 1、管道命令只处理前一个命令正确输出,不处理错误输出 2、管道命令右边命令,必须能够接收标准输入流命令才行。 实例: [chengmo@centos5 shell]$ cat test.sh | grep -n 'echo' 5: echo "very good!"; 7: echo "good!"; 9: echo "pass!"; 11: echo "no pass!"; #读出test.sh文件内容,通过管道转发给grep 作为输入内容 [chengmo@centos5 shell]$ cat test.sh test1.sh | grep -n 'echo' cat: test1.sh: 没有那个文件或目录 5: echo "very good!"; 7: echo "good!"; 9: echo "pass!"; 11: echo "no pass!"; #cat test1.sh不存在,错误输出打印到屏幕,正确输出通过管道发送给grep [chengmo@centos5 shell]$ cat test.sh test1.sh 2>/dev/null | grep -n 'echo' 5: echo "very good!"; 7: echo "good!"; 9: echo "pass!"; 11: echo "no pass!"; #将test1.sh 没有找到错误输出重定向输出给/dev/null 文件,正确输出通过管道发送给grep [chengmo@centos5 shell]$ cat test.sh | ls catfile httprequest.txt secure test testfdread.sh testpipe.sh testsh.sh testwhile2.sh envcron.txt python sh testcase.sh testfor2.sh testselect.sh test.txt text.txt env.txt release sms testcronenv.sh testfor.sh test.sh testwhile1.sh #读取test.sh内容,通过管道发送给ls命令,由于ls 不支持标准输入,因此数据被丢弃 这里实例就是对上面2点注意的验证。作用接收标准输入的命令才可以用作管道右边。否则传递过程中数据会抛弃。常用来作为接收数据管道命令有:sed,awk,cut,head,top,less,more,wc,join,sort,split 等等,都是些文本处理命令。 管道命令与重定向区别 区别是: 1、左边的命令应该有标准输出| 右边的命令应该接受标准输入 左边的命令应该有标准输出> 右边只能是文件 左边的命令应该需要标准输入< 右边只能是文件

Windows进程内标准输出重定向

Windows进程内标准输出重定向及其在程序调试上的应用 一、如何实现 打印调试信息的方法有很多,最常用的是使用标准输出设备(如printf、cout等),也可以用OutPutDebugString输出、用DebugView工具查看,还可以写入日志文件。如果程序运行需要记录日志(log),往往需要打开个文件,或许是写入系统事件、用系统的事件查看器查看。 应用程序打印调试信息、日志的方法往往是确定的,但如果是要编写一个模块或者说组件,那样的输出信息应该写入哪里呢?或者说程序本身对此也没有明确需求的话,那该怎么办呢? 可喜的是一个进程的标准输出是可以重定向的,所以我建议把调试信息直接打到标准输出上,这样代码中可以统一使用cout或者printf,然后根据需要将标准输出重定向。 Linux中重定向标准输出就容易了,因为有强大的dup2函数。而对于Windows的重定向,貌似往往是用于子进程的,在用CreateProcess创建子进程时设置子进程的标准输出句柄。而我们想要的是重定向自己这个进程的标准输出,那个用不上。我在MSDN中也没找到类似dup2的Win32 API函数,只有一个DuplicateHandle函数,这相当于linux中的dup,也用不上。 这里顺便提下,SetStdHandle是不能实现重定向的。这个函数的功能是将某句柄指向标准设备,并不能将标准设备句柄重定向到另外的句柄。 于是我就想到,Windows不是支持一部分POSIX标准的吗。于是我找到了一个CRT的函数,叫_dup2,看起来是不是特眼熟,对了,这就是Windows中dup2的兼容版本。 值得注意的是,_dup2以及与此相关的一系列CRT中的IO函数(如_read,_write)均以下划线开头,其余与linux大致相同,其参数中所谓的文件描述符与Win32中的句柄不一样,文件描述符实际上是句柄数组的索引,也就是说文件描述符不能与句柄混用。比如0,1,2分别是标准输入、标准输出、标准错误的文件描述符,但句柄值不是这样确定的。文件描述符不是Win32的概念,是POSIX中的概念。 _dup2用法与dup2大致相同,不多解释,不了解的可以查阅dup2相关资料。下面讲点应用。 二、如何应用于调试 写一个模块时,我们可以直接用cout/printf来作调试。但是如果这个模块用于图形界面或许是系统服务呢?这时标准输出看不到了,我们可以用OutPutDebugString函数和DebugView 这样的调试工具。这样就带来一种选择,而选择往往是增加软件复杂度的因素。所以我的想法是代码中只用cout/printf,如果需要将其重定向到调试工具中去。 如何实现呢,用匿名管道和线程。 用一个pipe,标准输出重定向到其write端,然后创建一个线程,线程要做的就是从pipe的

Java输入、输出流

第八章输入输出流 【课前思考】 1.字节流和字符流的基类各是什么? 2.什么是对象的串行化?对象串行化的作用是什么? 【学习目标】 本讲主要讲述了java语言中的输入/输出的处理,通过本讲的学习,同学们可以编写更为完善的java 程序。 【学习指南】 仔细阅读本章各知识点的内容, 深刻理解 java 语言中输入/输出流的处理方法,掌握处理问题的方法,多练习,多上机。 【难重点】 ●遇到实际问题时,要根据需要正确使用各种输入/输出流,特别是对中文使用适当的字符输入流。 ●正确使用对象串行化的方法。 ●处理字符流时,其构造方法的参数是一个字节流。 ●对象串行化的概念。 【知识点】 ●I/O 流概述 ●文件处理 ●过滤流 ●字符流的处理 ●对象的串行化 ●其它常用的流 【内容】 第一节数据流的基本概念 理解数据流 流一般分为输入流(Input Stream)和输出流(Output Stream)两类,但这种划分并不是绝对的。比如一个文件,当向其中写数据时,它就是一个输出流;当从其中读取数据时,它就是一个输入流。当然,键盘只是一个数人流,而屏幕则只是一个输出流。 Java的标准数据流 标准输入输出指在字符方式下(如DOS),程序与系统进行交互的方式,分为三种: 标准输入studin,对象是键盘。 标准输出stdout,对象是屏幕。 标准错误输出stderr,对象也是屏幕。 例 8.1 从键盘输入字符。 本例用System.in.read(buffer)从键盘输入一行字符,存储在缓冲区buffer中,count保存实际读入的字节个数,再以整数和字符两种方式输出buffer中的值。Read方法在java.io包中,而且要抛出IOException异常。程序如下: import java.io.*; public class Input1 { public static void main(String args[]) throws IOException { System.out.println("Input: ");

unix试题参考

中国矿业大学2013~2014学年第 2 学期 《UNIX操作系统与工作站》试卷(A)卷 考试时间:100 分钟考试方式:闭卷 学院班级姓名学号 一.选择题(每题1分,共30分) 1.Unix系统是一个(D )的操作系统 A.单用户、单任务 B.单用户、多任务 C.多用户、单任务 D.多用户、多任务 2.默认情况下管理员创建了一个用户,就会在(B )目录下创建一个用户主目录。 A. /usr B. /home C. /root D. /etc 3.通过shell执行一个命令,必须先敲入一个( B ) A. 参数 B. 命令 C. 操作符 D. 终端ID号 4.在使用more命令显示文件的内容时,按( A )键来显示文本的下一屏内容。 A.空格键 B.回车键 C.b 键 D.q 键 5.用户编写了一个文本文件a.txt,想将该文件名称改为txt.a,下列命令(D )可以实现。 A. cd a.txt xt.a B. echo a.txt > txt.a C. rm a.txt txt.a D. cat a.txt > txt.a 6.按下( A )键能终止当前运行的命令 A. Ctrl-C B. Ctrl-F C. Ctrl-B D. Ctrl-D 7.用"rm -i",系统会提示什么来让你确认( B ) A. 命令行的每个选项 B. 是否真的删除 C. 是否有写的权限 D. 文件的位置 8.某文件的组外成员的权限为只读;所有者有全部权限;组内的权限为读与写,则该文件的权限为(D )。 A 467 B 674 C 476 D 764

9.文件exer1的访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限,下列命令正确的是(A )。 A chmod a+x g+w exer1 B chmod 765 exer1 C chmod o+x exer1 D chmod g+w exer1 10.在UNIX环境的当前目录下,有ch1.txt,ch2.txt,ch3su.txt,xch2.txt文件。请问哪个命令不可实现对ch开头的文件名的列示。( D ) A. ls ch[123]* B. ls ch[1-3]* C. ls ch* D. ls ch?.* 11.用来广播消息的命令是( C )。 A.talk B.write C.wall D.mail 12.确定myfile的文件类型的命令是什么(C ) A. type myfile B. type -q myfile C. file myfile D. whatis myfile 13.当字符串用单引号(’’)括起来时,SHELL将(C ) A.解释引号内的特殊字符 B.执行引号中的命令 C.不解释引号内的特殊字符 D.结束进程 14.如果想以修改时间排序浏览一个目录下文件的所有信息,命令是( C ) A.tail -200 B.ls –a C.ls –lt D.more 目录路径 15.用ls –al 命令列出下面的文件列表,( D )文件是符号连接文件。 A -rw-rw-rw- 2 hel-s users 56 Sep 09 11:05 hello B -rwxrwxrwx 2 hel-s users 56 Sep 09 11:05 goodbey C drwxr--r-- 1 hel users 1024 Sep 10 08:10 zhang D lrwxr--r-- 1 hel users 2024 Sep 12 08:12 cheng 16. 关于Shell的说法,不正确的是( D ) A. 操作系统外壳 B. 用户与Linux内核之间的接口程序 C. 一个命令语言解释器 D. 一种和C类似的程序语言 17.要查看unix命令find的详细用法,用以下哪个命令( C ) A.help find B.find help C.man find D.find man 18.为了显示文件“-test”的内容可以用命令:(B)。 A.cat -test B.more “-test” C.less -- -test D.sort $-test 19.下面哪条命令可把./dir1目录(包括它的所有子目录)内容复制到./dir2中( D ) A. cp -i ./dir1/* ./dir2 B. cp -P ./dir1/* ./dir2 C. cp -d ./dir1/* ./dir2 D. cp -r ./dir1/* ./dir2 20.为了将当前目录下所有.TXT 文件打包并压缩归档到文件this.tar.gz,我们可以使用( A ) A tar czvf this .tar.gz ./*.txt B tar ./*.txt czvf this .tar.gz

Linux输入输出重定向的原理和实现

Linux I/O重定向的原理和实现 在Unix系统中,每个进程都有STDIN、STDOUT和STDERR这3种标准I/O,它们是程序最通用的输入输出方式。几乎所有语言都有相应的标准I/O函数,比如,C语言可以通过scanf从终端输入字符,通过printf向终端输出字符。熟悉Shell的朋友都知道,我们可以方便地对Shell命令进行I/O重定向,比如find -name "*.java" >testfile.txt 把当前目录下的Java文件列表重定向到testfile.txt。多数情况下,我们只需要了解I/O重定向的使用就够了,但是如果要编程实现类似Shell的I/O重定向以及管道功能,那么就需要清楚它的原理和实现。 下面本文就以Linux系统为具体例子,介绍I/O重定向的原理和实现(文中实验环境为Ubuntu 12.04,内核版本3.2.0-59)。 文件描述符表 理解I/O重定向的原理需要从Linux内核为进程所维护的关键数据结构入手。对Linux 进程来讲,每个打开的文件都是通过文件描述符(File Descriptor)来标识的,内核为每个进程维护了一个文件描述符表,这个表以FD为索引,再进一步指向文件的详细信息。在进程创建时,内核为进程默认创建了0、1、2三个特殊的FD,这就是STDIN、STDOUT和STDERR,如下图所示意: 所谓的I/O重定向也就是让已创建的FD指向其他文件。比如,下面是对STDOUT重定向到testfile.txt前后内核文件描述符表变化的示意图 重定向前:

重定向后: 在I/O重定向的过程中,不变的是FD 0/1/2代表STDIN/STDOUT/STDERR,变化的是文件描述符表中FD 0/1/2对应的具体文件,应用程序只关心前者。本质上这和接口的原理是相通的,通过一个间接层把功能的使用者和提供者解耦。 下面我们通过strace命令跟踪一下echo命令的系统调用: dagang@ubuntu12:~$ strace echo hello 2>&1 >/dev/null | grep write write(1, "hello\n", 6) = 6 我们可以看到write(1, "hello\n", 6) 这样一个系统调用,它的第一个参数1就是代表的STDOUT的FD,这说明对于echo程序,它只管(通过标准I/O函数从STDOUT)向FD 1写入,而不关心它们FD 1到底对应的是哪个文件。 Shell正是通过I/O重定向和管道这种特殊的文件把多个程序的STDIN和STDOUT串联在一起组成更复杂功能的,下面是Shell中通过管道的示意图: 下面我们用一个实际的例子来体验一下: dagang@ubuntu12:~$ sleep 30 | sleep 40 & [1] 5584 dagang@ubuntu12:~$ pgrep -l sleep 5583 sleep 5584 sleep dagang@ubuntu12:~$ ll /proc/5583/fd total 0 lrwx------ 1 dagang dagang 64 Feb 27 13:41 0 -> /dev/pts/3 l-wx------ 1 dagang dagang 64 Feb 27 13:41 1 -> pipe:[246469] lrwx------ 1 dagang dagang 64 Feb 27 13:41 2 -> /dev/pts/3 dagang@ubuntu12:~$ ll /proc/5584/fd

Java基础输入输出

Java基础输入输出 io包支持Java的基本I/O(输入/输出)系统,包括文件的输入/输出。对输入/输出的支持是来源于Java的内核API 库,而不是语言关键字。 一、输入/输出基础 很多实际的Java应用程序不是基于文本的控制台程序。尽管基于文本的程序作为教学实例是很出色的,它们无法胜任JA V A在实际中的重要应用。Java对外设输入/输出的支持也是有限的,并且用起来有些笨拙——甚至是在简单的例子程序中。基于文本的控制台输入/输出对于Java程序并不是十分重要。 Java 提供了与文件和网络相关的强大的和灵活的输入/输出支持,Java的输入/输出系统是紧密相连并且是具有一致性的。 1.1 流的概念 Java程序通过流来完成输入/输出。流是生产或消费信息的抽象。流通过Java的输入/输出系统与物理设备链接。尽管与它们链接的物理设备不尽相同,所有流的行为具有同样的方式。这样,相同的输入/输出类和方法适用于所有类型的外部设备。这意味着一个输入流能够抽象多种不同类型的输入:从磁盘文件,从键盘或从网络套接字。同样,一个输出流可

以输出到控制台,磁盘文件或相连的网络。流是处理输入/输出的一个洁净的方法,例如它不需要代码理解键盘和网络的不同。Java中流的实现是在java.io包定义的类层次结构内部的。 1.2 字节流和字符流 要使用流类,必须导入Java.io包。Java 2 定义了两种类型的流:字节类和字符类。字节流(byte stream)为处理字节的输入和输出提供了方便的方法。例如使用字节流读取或书写二进制数据。字符流(character stream)为字符的输入和输出处理提供了方便。它们采用了统一的编码标准,因而可以国际化。在某些场合,字符流比字节流更有效。在最底层,所有的输入/输出都是字节形式的。基于字符的流只为处理字符提供方便有效的方法。下面是对字节流和字符流的概述。 1.2.1 字节流类 字节流由两个类层次结构定义。在顶层有两个抽象类:InputStream 和OutputStream。每个抽象类都有多个具体的子类,这些子类对不同的外设进行处理,例如磁盘文件,网络连接,甚至是内存缓冲区。字节流类显示于表1-1中。 表1-1 字节流类 流类含义 BufferedInputStream缓冲输入流 BufferedOutputStream缓冲输出流

cmd中的特殊符号

cmd中的特殊符号 2007年05月31日星期四 00:46 @ \\隐藏命令的回显。 ~ \\在for中表示使用增强的变量扩展; 在set中表示使用扩展环境变量指定位置的字符串; 在set/a中表示按位取反。 % \\使用两个%包含一个字符串表示引用环境变量。比如一个%time%可以扩展到当前的系统时间; 单个%紧跟0-9的一个数字表示引用命令行参数; 用于for中表示引用循环变量; 连续的两个%表示执行时脱为一个%。 ^ \\取消转义字符,即将所有转义字符的转义作用关闭。比如要在屏幕显示一些特殊的字符,比如> >> | ^等时,就可以在其前面加一个^符号来显示这个^后面的字符了,^^就是显示一个^,^|就是显示一个|字符了; 在set/a中是按位异; 在findstr/r的[]中表示不匹配指定的字符集。 & \\命令连接字符。比如我要在一行文本上同时执行两个命令,就可以用&命令连接这两个命令; 在set/a中是按位与。 * \\代表任意个任意字符,就是我们通常所说的"通配符";比如想在c盘的根目录查找c盘根目录里所有的文本文件(.txt),那么就可以输入命令"dir c:\*.txt"; 在set/a中是乘法。比如"set/a x=4*2",得到的结果是8; 在findstr/r中表示将前一个字符多次匹配。 () \\命令包含或者是具有优先权的界定符吧,比如for命令要用到这个(),我们还可以在if,echo等命令中见到它的身影; - \\范围表示符,比如日期的查找,for命令里的tokens操作中就可以用到这个字符; 在findstr/r中连接两个字符表示匹配范围;

Java 输入输出(含部分答案)

Java输入输出 知识点: 1、文件和流的操作,理解字节流和字符流的概念 2、异常处理的概念,自定义异常类 一、选择题 1、如果一个程序段中有多个catch,则程序会按如下哪种情况执行( ) A)找到合适的例外类型后继续执行后面的catch B)找到每个符合条件的catch都执行一次 C)找到合适的例外类型后就不再执行后面的catch D)对每个catch都执行一次 2、程序员将可能发生异常的代码放在()块中,后面紧跟着一个或多个()块。 A) catch、try B) try、catch C) try、exception D) exception、try 3、在Java语言中,在程序运行时会自动检查数组的下标是否越界,如果越界,会抛掷下面的异常( ) A) SQLException B) IOException C) ArrayIndexOutOfBoundsExcetion D) SecurityManager 4、在Java中,关于捕获异常的语法try-catch-finally的下列描述哪些正确( ) A) try-catch必须配对使用B) try可以单独使用 C) try-finally必须配对使用D) 在try-catch后如果定义了finally,则finally肯定会执行 5、给定下面的代码片断: public class Animal{ public void Cat(){ try{ Method(); } catch(ArrayIndexOutBoundsException e) {"Exception1");} catch(Exception e) {"Exception2");} finally {"Hello World!!");} } public void Method() { } public static void main(String[] args) { =new Animal (); Ani. Cat (); } } 如果函数method正常运行并返回,会显示下面的哪些信息( ) A) Hello World B) Exception1 C) Exception2 D) Hello World!!

Linux重定向和管道(精)

6.3 Linux重定向和管道 实验目的 通过重定向和管道操作: 1) 熟悉输入/输出(I/O) 重定向; 2) 把标准输出重定向创建一个文件; 3) 防止使用重定向的时候覆盖文件; 4) 把输出追加到一个现有的文件中; 5) 把一个命令的输出导入到另一个命令中。 实验内容与步骤 在本实验中将会用到下列命令: pwd:显示当前的工作路径。 cd:改变目录路径。 ls:显示指定目录的内容。 more:分页显示文件的内容。这是用于显示文本文件的首选方法。 head:截取显示文件的开头部分(默认为开头10行) 。 tail:截取显示文件的结尾部分(默认为最后10行) 。 cal:有关日历的命令。 set:当前shell下定义的一系列变量及其值。 echo:显示变量的值。 ps:显示当前进程的信息。 data:显示或设置系统日期和时间。 grep:查找文件中指定的关键字的行并输出。 步骤1:开机,登录进入GNOME。 在GNOME登录框中填写指导老师分配的用户名和口令并登录。 步骤2:访问命令行。 单击红帽子,在“GNOME帮助”菜单中单击“系统工具”-“终端”命令,打开终端窗口。 1. 使用重定向标准输出符号 步骤3:重定向标准输出,创建一个文件。 右尖括号或称大于符号(>) 把命令的输出发送到一个文件中:使用单个右尖括号,当指定文件名不存在的时候,将创建一个新文件;如果文件名存在,它将

被覆盖。(注意:命令、重定向符号和文件名之间的空格是可选的) 。 重定向标准输出命令的格式是: command > file 1) 为核实当前所在目录位置,使用什么命令? ___pwd________________________________________________________ 如果当前位置不在主目录中,使用什么命令可以改变到主目录中? ___cd /__________________________________________________________ 2) 如果希望把文件和目录列表截获,存储为主目录中的一个文件,这样可以追踪主目录中有什么文件。使用什么命令,把长文件列表的输出重定向,创建一个叫做homedir.list的文件。 ____ls >homedir.list________________________________________________ 3) 新文件homedir.list被放在哪里? __根目录_________________________________________________________ 使用ls命令核实新文件存在。 4) 使用什么命令,以一次一屏的方式,来查看刚才创建的文件内容? __ls –l|more homedir.list____________________________________________ 5) 使用head命令截获homedir.list文件的前10行,通过重定向,创建一个叫做dhomedir.list-top-10的新文件。应该使用什么命令? ___head –10 homedir.list >dhomedir.list-tail-10_________________________ 使用more命令查看文件的内容。 6) 使用tail命令,截获homedir.list文件的最后10行,通过重定向,创建一个叫做dhomedir.list-top-10的新文件。使用什么命令? ___tail –10 homedir.list >dhomedir.list-top-10___________________________ 使用more命令查看文件的内容。 7) 截获cal -y命令的输出,把它存到名为calendar的文件中。查看文件的内容。截获了什么? ___cal –y>calendar |more calendar 截获了2008年12个月份的日历 8) 截获cal 2010命令的输出,把它存到名为calendar的文件中。查看文件的内容。其中有什么内容? _ cal -y 2010 > calendar |more calendar 2010年12月份的日历 日历有什么变化? ____不是2008年,变成2010年了_____________________________________ 步骤4:防止使用重定向的时候覆盖文件。 在bash shell中,一个叫做noclobber的选项可以用来设定防止在重定向的过程中覆盖文件。可以在命令行中使用$set -o noclobber命令来完成。o代表选项。 为了重新激活clobber特性,使用$set -o noclobber;撤消则用set +o noclobber。 如果你使用的是csh shell,为了激活/撤消C shell中的clobber特性,使用set noclobber和unset noclobber。 1) 输入命令,打开shell中的noclobber选项。输入什么命令? ___set –o noclobber__________________________________________ _____ 2) 输入命令ls -l > homedir.list,结果是什么? ___bash:homedir.list:cannot overwrite existing file.因为clobber选项防止了重定向过程覆盖文件___________________________________ _ _

Java的输入与输出流(实验报告)

成都大学实验报告 实验项目名称Java的输入与输出流 一、实验目的: 1. 理解I/O流的概念,掌握其分类 2. 掌握文本文件读写、二进制文件读写 二、实验内容(包括源程序及相关说明): 1. 分别使用FileWriter 和 BufferedWriter 往文件中写入10万个随机数,比较用时。源代码如下: (1) import .*; public class Ex1_1 { public static void main(String[] args) throws IOException{ long t=(); FileWriter fw =new FileWriter("d:\\"); for(int i=1;i<=100000;i++) { ((int)()*10000)+" \n"); } (); t=()-t; "The elapsed: "+t); } } (2) import .*; public class Ex1_1 { public static void main(String[] args) throws IOException{ long t=(); BufferedWriter fw=new BufferedWriter(new FileWriter("d:\\")); for(int i=1;i<=100000;i++){

((int)()*10000)+"\n"); } (); t=()-t; "The elapsed: "+t); } } 2. 生成一个 html文件,使其能显示2的幂次(0~9)的表格如下: 代码如下: import .*; public class Ex1_1 { public static void main(String[] args) throws IOException{ BufferedWriter bw=new BufferedWriter(new FileWriter("d:\\")); ("

"); (); (""); for(int i=0;i<=9;i++){ (""); } ("
Power of 2Value
"+i+""+(i, 2)+"
"); (); (); } } 3. 在文本文件中包含有很长篇幅的英语短文,编写程序要求统计文件的所有短文中包含英文字母“A”的个数,并显示统计的时间。 第一种实现方法 代码如下: import class EXP1_1 { public static void main(String[] args) throws IOException{ long t =(); String filename="D:\\"; FileInputStream fis=new FileInputStream(filename); int count=0;

Linux Shell特殊字符和控制字符大全

Linux Shell特殊字符和控制字符大全Shell特殊字符 # 注释 ?表示注释 #注释 ?在引号中间和\#等表示#本身 ?echo ${PATH#*:} # 参数替换,不是一个注释 ?echo $(( 2#101011 )) # 数制转换,不是一个注释 ; 分隔 ?命令分隔,在一行中写多个命令 echo "aa" ; echo "bb" ?在条件中的if和then如果放在同一行,也用;分隔 ;; case条件的结束 . 命令相当于source命令 ?命令:source ?文件名的前缀,隐藏文件 ?目录:.当前目录,..父目录 ?正则表达式:匹配任意单个字符 "" 部分引用支持通配符扩展 ' ‘ 全引用,不进行通配符扩展 \ 转义 / 目录分隔符 , 多个命令都被执行,但返回最后一个 ` 后置引用 : 操作符 ?空操作 ?死循环: while : ?在if/then中表示什么都不做,引出分支

?设置默认参数: : ${username=`whoami`} ?变量替换: : ${HOSTNAME?} ${USER?} ${MAIL?} ?在和 > (重定向操作符)结合使用时,把一个文件截断到0 长度,没有修改它的权限;如果文件在之前并不存在,那么就创建它.如: : > data.xxx #文件"data.xxx"现在被清空了. 与 cat /dev/null >data.xxx 的作用相同然而,这不会产生一个新的进程,因为":"是一个内建命令. 在和>>重定向操作符结合使用时,将不会对想要附加的文件产生任何影 响. 如果文件不存在,将创建. * 匹配0个或多个字符;数学乘法;**幂运算 ? 匹配任意一个字符;但在((a>b?a:b))表示c语言中的三目运算 $ ?取变量的值 echo $PATH ?正则表达式中表示行的结尾 ?${} 参数替换 ${PAHT} ?$* 所有参数 ?$# 参数个数 ?$$ 进程的ID ?$? 进程的返回状态 ( ) ?命令组,在一个子Shell中运行 (a=3;echo $a) 其中定义的变量在后面不可用 ?数组初始化: array=(a,b,c) { } 代码块,即一个匿名函数,但其中定义的变量在后面依然可用 { } \; 用在find的-exec中 $find -name *.txt -exec cat {} \; [ ] ?测试 [-z $1] ?数组元素 a[1]='test' ?[[]]表示测试使用[[ ... ]]条件判断结构, 而不是[ ... ], 能够防止脚本中的许多逻辑错误. 比如, &&, ||, <, 和> 操作符能够正常存在于[[ ]]条件判断结构中, 但是如果出现在[ ]结构中的话, 会报错.

Linux Shell(bash) 重定向技巧

Linux Shell(bash) 重定向技巧 linux 环境中支持输入输出重定向,用符号<和>来表示。 0、1和2分别表示标准输入、标准输出和标准错误信息输出, 可以用来指定需要重定向的标准输入或输出,比如2>a.txt 表示将错误信息输出到文件a.txt中。 同时,还可以在这三个标准输入输出之间实现重定向,比如将错误信息重定向到标准输出,可以用2>&1来实现。 Linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null。 如果想要正常输出和错误信息都不显示,则要把标准输出和标准错误都重定向到/dev/null,例如: # ls 1>/dev/null 2>/dev/null 还有一种做法是将错误重定向到标准输出,然后再重定向到/dev/null,例如: # ls >/dev/null 2>&1 注意:此处的顺序不能更改,否则达不到想要的效果,此时先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null. 1. 标准输入的控制 语法:命令< 文件将文件做为命令的输入。 例如: mail -s “mail test” wesongzhou@https://www.doczj.com/doc/a518058524.html, < file1 将文件file1 当做信件的内容,主 题名称为mail test,送给收信人。 2. 标准输出的控制 语法:命令> 文件将命令的执行结果送至指定的文件中。 例如: ls -l > list 将执行“ls -l” 命令的结果写入文件list 中。

linux管道学习笔记

声明:本文档所有内容均为网上整理所得,不保证所有内容正确性.版权属作者本人所有。不用做任何商业用途,仅供广大网友学习交流之用,如有侵权,请联系本人删除,若发现文档中内容有错误或者有个人见解,欢迎指教与相互讨论.Email:.weiming999@https://www.doczj.com/doc/a518058524.html,。 管道 无名管道 管道包括无名管道和有名管道两种,前者在父子进程中流行,后者由于可以独立成为磁盘文件而存在,因为能够被无血缘关系的进程共享. 无名管道通常直接称为管道,它占用两个文件描述符,不能被非血缘关系的进程共享,一般应用于父子进程. UNIX中一切皆为文件,管道也是一种文件,称为管道文件.当系统中创建一个管道时,它返回两个文件描述符:一个文件以只写打开,作为管道的输入端;另一个文件以只读打开,作为管道的输出端. #include int pipe(int fildes[2]); 函数pipe在内核中创建一个管道,并分配两个文件描述符标识管道的两端,这两个文件描述符存储与fildes[0]和fildes[1]中.一般约定fildes[0]描述管道和输出端,进程向此文件描述符中读取数据,fildes[1]描述管道的输入端,进程向此文件描述符写入数据. fildes[0]:只读文件描述符. fildes[1]:只写文件描述符. Pipe调用成功返回0,否则返回-1. 单向管道流模型 管道的两端(输入端和输出端)被一个进程控制没有太大的意义,如果管道的两端分别控制在不同的进程中,这两个进程之间就能够进行通信.拥有管道输入端的进程,可以向管道发送数据,拥有管道输出端的进程,可以从管道中接受前一个进程发送来的消息. 1)从父进程流向子进程的管道 在父进程创建无名管道并产生子进程后,父子进程均拥有管道两端的访问权.此时关闭父进程的管道输出端,关闭子进程的管道输入端,就形成一个从父进程到子进程的管道流,数据由父进程写入,从子进程读出. 2)从子进程流向父进程的管道 在父进程中创建无名管道并产生子进程后,父子进程均拥有两端的访问权.此时关闭父进程的管道输入端,关闭子进程的管道输出端,就形成了一个从子进程到父进程的管道流.数据由子进程写入,从父进程读出. #i n c l u d e

Linux管道、重定向及多命令

管道和重定向 多命令协作就是通过管道和重定向机制完成的 1.命令行shell的数据流定义 2.重定向 >将STDOUT重定向到文件(覆盖) andy@Fred:~/fred$ echo "abcd" > dddd andy@Fred:~/fred$ ls a abc b b cc c dddd andy@Fred:~/fred$ cat dddd abcd andy@Fred:~/fred$ ls -l 总用量12 -rw-r--r-- 1 andy andy 0 1月 3 21:43 a drwxr-xr-x 2 andy andy 4096 1月 5 10:47 abc -rw-r--r-- 1 andy andy 0 1月 3 21:43 bb -rw-r--r-- 1 andy andy 24 1月 3 21:43 ccc -rw-r--r-- 1 andy andy 5 1月7 21:33 dddd andy@Fred:~/fred$ ls -l > ddd andy@Fred:~/fred$ cat ddd 总用量12 -rw-r--r-- 1 andy andy 0 1月 3 21:43 a drwxr-xr-x 2 andy andy 4096 1月 5 10:47 abc -rw-r--r-- 1 andy andy 0 1月 3 21:43 bb -rw-r--r-- 1 andy andy 24 1月 3 21:43 ccc -rw-r--r-- 1 andy andy 0 1月7 21:35 ddd -rw-r--r-- 1 andy andy 5 1月7 21:33 dddd >>将STDOUT重定向到文件(追加到最后,另起一行) 错误信息是不能添加进入的 2>是将错误信息进行添加,但是正确是信息是不会写入。

Windows下命令重定向操作符

Windows使用命令重定向操作符 (Redirection Operators) 可以使用重定向操作符将命令输入和输出数据流从默认位置重定向到不同的位置。输入或输出数据流的位置即为句柄。 下表列出了可用于将命令输入和输出数据流进行重定向的操作符。 重定向操 作符 说明 >将命令输出写入到文件或设备(例如打印机)中,而不是写在命令提示符窗口中。 <从文件中而不是从键盘中读入命令输入。 >>将命令输出添加到文件末尾而不删除文件中的信息。>&将一个句柄的输出写入到另一个句柄的输入中。 <&从一个句柄读取输入并将其写入到另一个句柄输出中。 | 从一个命令中读取输出并将其写入另一个命令的输入中。也称作管 道。 默认情况下,可以从键盘将命令输入(即 STDIN 句柄)发送到 Cmd.exe, 然后由 Cmd.exe 将命令输出(即 STDOUT 句柄)发送到命令提示符窗口。 一般的命令行程序输入输出请求都通过内部定义三个“端口”(在NT下称为“句柄”,在DOS下未定义)来完成,分别为标准输入stdin、标准输出stdout、标准错误stderr。它们通常指向的设备为控制台(console,代码为CON),其中stdin指向控制台的键盘,stdout/stderr指向控制台的监视器。因此,控制台通常即指键盘与监视器的联合体,这是在早期大型机的终端机上所体现出来的概念。其中的stdin可被<重定向,stdout可被>、>>重定向,而stderr在DOS 下不可直接重定向,只有通过ctty或其它命令将系统控制权转交给其它设备的方式,来间接完成。 下表将列出可用的句柄。 句柄句柄的数字代号说明 STDIN 0 键盘输入 STDOUT 1 输出到命令提示符窗口 STDERR 2 错误输出到命令提示符窗口 UNDEFINED 3-9 这些句柄由应用程序和各个具体工具单独定义。

相关主题
文本预览