重定向是个 *** 作系统的概念
它的主要含义是将原本从一个输入输出设备的输入输出 *** 作,转向到从另外一个输入输出设备进行。
例如:linux系统中sh启动进程时会默认打开三个输入输出文件:标准输入文件、标准输出文件和标准错误文件(一般情况下是控制台),他们的文件句柄分别是0,1,2,
有时候你需要将进程的输出输出到一个文件的时候,你会这样处理:a>filetxt(假定a是程序名称)
那么sh就会将默认的两个输出文件1和2改为:filetxt
这就叫重定向。
例如下面的sh命令:a
<fatxt
1>fotxt
2>fetxt
sh就将0的输入文件该向为:fatxt,也就是将输入改为从文件fatxt
将1输出文件重定向为:fotxt
将2输出文件重定向为:fetxt
一般这些都是 *** 作系统记得内容,基本上与开发没有关系,你说gfortran要用重定向,我不太明白。
这个问题来自社区提问 代码保留一份用来以后回答
using System;using System ComponentModel;using System Windows Forms;namespace WindowsApplication {/////
/// gui 类/// public partial class Form : Form {public Form () {InitializeComponent();}private void button _Click(object sender EventArgs e) {//用子线程工作new System Threading Thread(new System Threading ThreadStart(StartDownload))
Start();}//开始下载public void StartDownload() {Downloader downloader = new Downloader();downloader onDownLoadProgress += new Downloader dDownloadProgress(downloader_
onDownLoadProgress);downloader Start();}//同步更新uivoid downloader_onDownLoadProgress(long total long current) {if (this InvokeRequired) {this Invoke(new Downloader dDownloadProgress(downloader_onDownLoadProgress)
new object[] { total current });}else {this progressBar Maximum = (int)total;this progressBar Value = (int)current;}}}
/////
/// 下载类/// public class Downloader {//委托public delegate void dDownloadProgress(long total long current);//事件public event dDownloadProgress onDownLoadProgress;//开始模拟工作public void Start() {for (int i = ; i < ; i++) {if (onDownLoadProgress != null)onDownLoadProgress( i);System Threading Thread Sleep( );}}}}lishixinzhi/Article/program/ASP/201311/21779
用vbs sendkeys
假设你已打开超级终端并命名为aa,将下面的代码另存为stvbs,双击运行即可。
Dim WshShell
Set WshShell=WScriptCreateObject("WScriptShell")
WScriptSleep 200
WshShellAppActivate "aa - 超级终端"
WScriptSleep 200
WshShellSendKeys "{ENTER}“
WScriptSleep 200
WshShellSendKeys "EN“
WScriptSleep 200
WshShellSendKeys "cisco“
WScriptSleep 200
WshShellSendKeys "show{BS}config“
如果一定要批处理的话就吧下面的代码存为stbat
echo Dim WshShell>stvbs
echo Set WshShell=WScriptCreateObject("WScriptShell")>>stvbs
echo WScriptSleep 200>>stvbs
。
。
。
echo WshShellSendKeys "show{BS}config“>>stvbs
st
del stvbs
输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。
这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中。
输出重定向比输入重定向更常用,很多情况下都可以使用这种功能。
#include <iostream>
using namespace std;
void main()
{
system("baiduddexe >> ddlog");
system("pause");
}
双击这个工程生成的exe文件,会打开一个命令行窗口,但是这个窗口只是一个壳子,实际上在运行的是baiduddexe,当然这个可执行文件的名字你也可以通过输入或是配置文件来灵活打开。同时将baiduddexe源代码中所有的标准输出(cout<<或是printf()或printline()等等)全部写入到当前目录下的ddlog,程序会新建这个文件。
下面附上baiduddexe的工程源码供你参考:
#include<iostream>
#include<fstream>
using namespace std;
double v_f(int i)
{
if(i==1)
return 1;
if(i%2==0)
return v_f(i/2);
return v_f((i-1)/2)+v_f((i-1)/2+1);
}
void main()
{
int i = 1;
while(i!=0)
{
cout<<"v_f("<<i<<") = "<<v_f(i)<<endl;
cin>>i;
}
}
你会发现,你的输入被传递给了程序biduddexe,而输出重定向到ddlog文件中。记得两个exe要在同一个目录下,你可以先生成后,再拷贝到同一目录下运行。
用途:不挂断地运行命令。
语法:nohup Command [ Arg … ] [ & ]
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohupout 文件中。
如果当前目录的 nohupout 文件不可写,输出重定向到 $HOME/nohupout 文件中。
如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
退出状态:该命令返回下列出口值:
126 可以查找但不能调用 Command 参数指定的命令。
127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
用途:在后台运行
一般两个一起用
3为什么呢 2>&1 要写在后面?
首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。
2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。
用strace可以看到:
这个命令中实现重定向的关键系统调用序列是:
open(file) == 3
dup2(3,1)
dup2(1,2)
这个命令中实现重定向的关键系统调用序列是:
dup2(1,2)
open(file) == 3
dup2(3,1)
注意:0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
这里的2和>之间不可以有空格,2>是一体的时候才表示错误输出。
有两种做法:
一种是代码内重定向,
在main开始的地方调用:
stdin=freopen("wordtext", "r", stdin);
另一种是调用的时候重定向。如果你的可执行文件是aexe,那么调用的时候,
aexe<wordtext
以上就是关于请解释linux中的“重定向”的概念,由浅入深!全部的内容,包括:请解释linux中的“重定向”的概念,由浅入深!、c#中重定向windows控制台程序的输出信息、批处理怎样将.txt中的字符直接重定向到超级终端中去等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)