3.标准IO和管道

标准IO和管道

1.标准输入和输出

  1. 程序:指令+数据
    读入数据:input
    输出数据:Output
  2. 打开的文件都有一个fd:file descriptor(文件描述符)
  3. Linux给程序提供三种I/O设备
    标准输入(STADIN)-0 默认接受来自键盘的输入
    标准输出(STDOUT)-1 默认输出到终端窗口
    标准错误(STDERR)-2 默认输出到终端窗口
  4. I/O重定向:改变默认位置
    ls > /dev/pts/5 重定向到别的窗口(tty)

2. 把输出和错误重定向到文件

  1. STDOUT和STDERR可以被重定向到文件

    ​ 命令 操作符号 文件名
    支持的操作符号包括:

    >STDOUT重定向到文件
    2> 把STDERR 重定向到文件
    &> 把所有输出重定向到文件
    ls /error /data >f1 >f2

  2. >文件内容会被覆盖

  • set -C 禁止将内容覆盖已有文件,但可追加

  • > file 强制覆盖

  • set +C 允许覆盖

  1. 在原有内容基础上,追加内容
  2. 2> 覆盖重定向错误输出数据流
  3. 2>> 追加重定向错误输出数据流
  4. 标准输出和错误输出各自定向至不同位置
    command > /path/to/file.out 2>/path/to/error.out
  5. 合并标准输出和错误输出为同一个数据流进行重定向
    &>覆盖重定向
    &>>追加重定向
    COMMAND > /path/to/file.out 2>&1 (顺序很重要)
    COMMAND >> /path/to/file.out 2>&1
  6. (): 合并多个程序的STDOUT
    (cal 2007; cal2008) > all.txt
ls /error/ data    >all.log   2>&1  = ls /error/data  &>list.log 
把标准输出重定向标准输出,标准输出在重定向到all.log
次序问题: ls  /error /data 2>&1 2>all.log 正确显示在屏幕 错误显示在all.log中
A    cmd  > log 2&1
B   cdm 2>&1 >log     
C   cmd $>log
D   cmd  2>log    >&2
B 显示效果与众不同
不在屏幕上显示 hostname  > /dev/null   
改口令: echo redhat | passwd --stdin wang  &> /dev/null

标准输入:cat< /etc/hosts
cat< f1 >f1   f1文件被破坏
cat>f2  不停的追加

3. tr命令:

  1. tr转换和删除字符

  2. tr [options]...set1 [set2]

  3. 选项:

        -c -C --complement: 取字符集的补集
    	-d --delete : 删除所有属于第一字符集的字符(删除)
    	-s --squeeze-repeats:	把连续重复的字符以单独一个字符表示 (压缩)
    	-t --truncate-set1 :将第一个字符集对用字符转化为第二字符集对应的字符(替换)
    	[:alnum:]:字母和数字 
    	[:alpha:]:字母 
    	[:cntrl:]:控制(非打印)字符      
    	[:digit:]:数字 [:graph:]:图形字符 
    	[:lower:]:小写字母 
    	[:print:]:可打印字符     
    	[:punct:]:标点符号 
    	[:space:]:空白字符 
    	[:upper:]:大写字母      
    	[:xdigit:]:十六进制字符 
    
  4. 示例:tr 'a-z' 'A-Z' < /etc/fstab >f1.log

    `tr 'adc'  '1234'`
    adcdfd	//输入内容
    1232f2 	//转换的内容
    

4.从文件中导入STDIN

  1. 使用<来重定向标准输入
  2. 某些命令能够接受从文件中导入的STDIN
    tr 'a-z' 'A-Z'< /etc/issue
    该命令会把/etc/issue中的小写字符转换为大写字符
  3. tr -d adb </etc/fstab 删除fstab文件中的所有abc中任意字符
  4. cat >file
    hello
    world
    按Ctrl+d离开,可以使用文件来代替键盘的输入
    单行重定向enter才能重定向
  5. cat > filea <fileb
  6. cat < file1 >> file1

5.把多行发送给STDON

  1. 使用“<< 终止词” 命令从键盘吧多行重定向给STDIN
    直到 终止词 位置的所有文本都发送给STDIN
    有时被称为就地文本(heretext)

    eg:发邮件

    mail -s "hello" wang
    hi		//输入内容
    how are you 
    how ole are you
    .  //.结束退出
    
    su -  wang  切换用户
    mail 查看邮件
    

6. 管道pipe

    cdm1 | cmd2
	cmd1 stdout
	cmd2 stdin
  1. 管道(使用符号"|"表示)用来连接命令
    命令1|命令2|命令3…
    将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
    STDERR默认不能通过管道转发,可利用2&>1或|&实现
    最后一个命令会在当前shell进程的子shell进程中执行用来
    组合多种工具的功能
    ls | tr ‘a-z’ ‘A-Z’
  2. less : 一页一页地查看输入
    ls -l /etc | less
  3. mail: 通过电子邮件发送输入
    echo "test enmail " | mail -s “test” user@example.com
  4. lpr: 把输入发送给打印机
    echo "test print " | lpr -P printer_name
eg: 
homename | tr  'a-z' 'A-Z' | tr -d '.'
cat mail.txt | mail -s 'hello' wang

ls /boot /error  2&>1 |=tr 'a-z' 'A-Z' 
ls /boot /error    |& tr 'a-z' 'A-Z' 新
df | tr -s ' ' ':'

面试题: 计算1+2+...+100
echo {1..100} | tr ' ' '+' | bc
seq  -s +  1 100 | bc

7.管道-符号

  1. 示例:
    将/home里面带的文件打包,但打包的数据不是记录到文件,而是传送到stdout,经过管道后,将
    tar -cvf - /home 传送给后面的tar -xvf - ,后面的这个- 则是取前一个命令的stdout,因此,就不需要使用临时file了
  2. tar -cvf - /home | tar -xvf -

8.重定向到多个目标(tee)(可以重定向到文件中,又可以在屏幕中显示

  1. 命令1| tee [-a] 文件名 | 命令2
    把命令1的STDOUT保存在文件中,作为命令2的输入
    -a 追加
  2. 使用:
    保存不同阶段的输出
    复杂管道的故障排除
    同时查看和记录输出
eg:
ls | tee ls.log
who |tee  -a ls.log (-a 追加)
ls | tee ls.log | tr -d '\n'	
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
=========================================== TeeChart Pro Activex Control v2018 MS .NET COMPATIBILITY Copyright (c) 1997-2018 by Steema Software SL All Rights Reserved. http://www.steema.com email: [email protected] [email protected] =========================================== Document updated: June 2004 TeeChart Pro Activex Control MS Visual Studio .NET compatibility notes =========================================== Please see the release.txt release notes for bugfix and feature information about this release. =========================================== Changes for NET compatibility - The Chart.Series(xx) read-only property has been replaced by a Function method (affects only code written in VC++ and similar languages that make direct reference to Get_ and Set_ of properties). The new Series method (called Series) changes visibly by removal of the property 'Get_' element of the Function. The change is required due to a current MS.NET import restriction causing non-import of ActiveX properties that have an index parameter (only affects the root level of controls !). For a VB application no code change is necessary. Please see the following notes for other environments. The original property has been hidden in the interface and renamed to aSeries keeping its existing Dispid to support backward compatibility with applications compiled with previous releases of TeeChart 5. - The TChart OnSeriesBeforeAdd method uses a boolean variable called 'Continue'. "continue" is a keyword in C# (the language used to interim compile TeeChart namespace information in .NET). This had caused an import problem with the earlier releases of Visual Studio .NET. As a precaution we have chosen to rename the parameter to 'MoreValues' for the TeeChart Pro ActiveX Control. Notes on use: ------------- - Constant names in NET require full reference by default: eg. AxTChart1.AddSeries(TeeChart.ESeriesClass.scLine) Upgrading existing projects: ---------------------------- Upgrading existing Visual Studio projects works without manual intervention in code for most simple projects. Notable points relating to import: VISUAL BASIC project: ===================== - Designtime saved content of a Chart does not always successfully import to a NET project. We recommend you open the project first in its current environment (eg. Visual Basic v6) and provoke a change in the Chart and resave the project. That will update the saved frx Chart information data to v5.0.3. Then save the Chart content as a tee file by right-clicking the Chart and selecting 'Export'. Some projects 'may' then import the saved Chart correctly without further steps required. If the Chart content doesn't import successfully then right-click on the Chart and import the saved tee file. If the project fails to import, clear the Chart content after saving it to tee (remove and replace the Chart with an empty one) and re-import following the above step to later import the saved tee file. - Calls to interfaces not supported. In Visual Studio v6 and prior versions, it was possible to connect components by interface. eg. TeeCommander.Chart=TChart1 This is no longer possible. You should use the integer link: eg. TeeCommander.ChartLink=TChart1.ChartLink - Colour definition requires update TeeChart colours map as UInt32 when imported to NET. The colour definition when applied takes the following form: .Labels.Font.Color = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Cyan)) - Some event syntax is incorrect on import. Notably the Mouse events which are 'duplicated' by default NET appointed events. If you find event syntax to be incorrect, modify the syntax as follows: eg. Private Sub TChart1_OnMouseUpEvent(ByVal eventSender As System.Object, _ ByVal eventArgs As AxTeeChart.ITChartEvents_OnMouseUpEvent) _ Handles TChart1.OnMouseUp 'do something End Sub - Some form object (eg. Checkbox) events may fire before the Chart is loaded. That didn't occur in VB6 and will require a workaround in VB.NET if Chart properties are referenced in this way at Form load. eg. taken from VB Drag Points example: 'Check1.CheckStateChanged may fire when form is intialized Private Sub Check1_CheckStateChanged(ByVal eventSender As System.Object, _ ByVal eventArgs As System.EventArgs) _ Handles Check1.CheckStateChan ' switch 2D / 3D view... TChart1.Aspect.View3D = Check1.CheckState ' enable scroll-bar only in 3D... HScroll1.Enabled = Check1.CheckState End Sub In the above event the View3D line will fail as the Chart isn't yet loaded when the event is called. An option to workaround it may be to set a boolean 'OK_To_Run' variable to set after the first Chart Repaint. eg. OK_To_Run false on load and set to true in Form_Load event after Chart is populated, etc. Private Sub Check1_CheckStateChanged(ByVal eventSender As System.Object, _ ByVal eventArgs As System.EventArgs) _ Handles Check1.CheckStateChan ' switch 2D / 3D view... If OK_To_Run = True Then TChart1.Aspect.View3D = Check1.CheckState End if ' enable scroll-bar only in 3D... HScroll1.Enabled = Check1.CheckState End Sub Microsoft recommend a similar step (add a IsInitializing property to the Form). We'll be taking a closer look at these issues to see if we can recommend less demanding steps to resolve them. VISUAL C++ project: ===================== The Series declaration has changed. The easiest way to upgrade the project is to import TeeChart classes before upgrading the project to .NET. 1. All references to 'GetSeries(xx)' should be changed to 'Series(xx)' That will call the new Series method that returns the Series Interface (just as the predecesor property did). The Series property has been name changed to aSeries, retaining its DispId to support existing compiled applications. 2. The following is handled automatically if you import the TeeChart classes. For reference, the following changes occur to the Series declaration. *Note you should not need to do anything if you import TeeChart to your project. a) In the TChart.h Class header file the GetSeries declaration changes to: CSeries Series(long SeriesIndex); b) In the TChart.cpp Class impl. file the GetSeries declaration changes to: CSeries CTChart::Series(long SeriesIndex) { LPDISPATCH pDispatch; static BYTE parms[] = VTS_I4; InvokeHelper(0x14, DISPATCH_METHOD, VT_DISPATCH, (void*)&pDispatch;, parms, SeriesIndex); return CSeries(pDispatch); } Projects should then compile without issue. =========================================== Use of Strong Named Assemblies =========================================== If you compile Strong Named Assemblies then imported ActiveX Controls must also be Strong Named. The Utilities folder contains a Strong Name compiled version of: \Utilities\VS.NET\Strong Named DLLs - AxInterop.TeeChart.dll - TeeChart.dll They may be used to replace the automatically generated AxInterop.TeeChart.dll and Interop.TeeChart.dll created when TeeChart AX is added to a Windows Form. You should remove auto-generated dlls from the references list in the project Solution Explorer and from the Obj folder of the project and Debug or Release Bin folder. Then copy in the new Dlls to Obj and Bin folders and reference the new Dlls from their Obj folder location. =========================================== Please send us details about any other issues found to: http://www.teechart.net/support/modules.php?name=Forums Many thanks ! =========================================== http://www.steema.com support: http://www.teechart.net/support/modules.php?name=Forums -------------------------------------------

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值