`
haoningabc
  • 浏览: 1477830 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

重定向stdout到文件

阅读更多
把stdout重定向到文件
两种方法:
第一种方法没有恢复

通过freopen把stdout重新打开到文件
#include <stdio.h>
 
FILE *stream;
void main( void )
{
   stream = freopen( "freopen.out", "w", stdout ); // 重定向

  if( stream == NULL )
     fprintf( stdout, "error on freopen\n" );
  else
  {
     //system( "type freopen.out" );
     system( "ls -l" );
     fprintf( stream, "This will go to the file 'freopen.out'\n" );
     fprintf( stdout, "successfully reassigned\n" );
     fclose( stream );
  }
     fprintf( stdout, "this is not print out\n" );//这里没有输出
  //system( "ls" );//没有会造成问题,需要小心
}

输出结果

----------------------
第二种方法使用dup复制
先把 1 复制出来
然后建立个文件,用fileno取到文件描述符 覆盖到1
所有对1的操作都输出到文件了
用完之后,再把开始复制出来的 用dup2还给 1
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> 
int main( )
{
   int old;
   FILE *new;
   old = dup( 1 );   // 取标准输出句柄  
   if( old == -1 )
   {
      perror( "dup( 1 ) failure" );
      exit( 1 );
   }
   write( old, "This goes to stdout first\r\n", 27 );
   if( ( new = fopen( "data", "w" ) ) == NULL )
   {
      puts( "Can't open file 'data'\n" );
      exit( 1 );
   }
   if( -1 == dup2( fileno( new ), 1 ) )//把文件的描述符给到1,1就不代表stdout了
   {
      perror( "Can't dup2 stdout" );
      exit( 1 );
   }
   system( "ls -l" );
   puts( "This goes to file 'data'\r\n" );
   fflush( stdout );
   fclose( new );
   dup2( old, 1 ); // 恢复
   puts( "This goes to stdout\n" );
   puts( "The file 'data' contains:" );
   //system( "type data" );
   system( "file data" );
}

输出结果
  • 大小: 78.5 KB
  • 大小: 57.1 KB
分享到:
评论

相关推荐

    Windows管道(Pipe)重定向stdout,stderr,stdin

    有时我们需要重定向stdout,stderr,stdin。比如:将输出写入文件,又或者我们要将命令行程序输出结果显示到Windows对话框中。源码示范如何在Windows中实现,封装了几个简单易用的函数。

    RHCE技术培训-标准IO和管道技术介绍.pptx

    `&gt;`用于重定向STDOUT到文件,`2&gt;`用于重定向STDERR,`&&gt;`则同时重定向STDOUT和STDERR。如果文件已存在,`&gt;`会覆盖文件内容,而`&gt;&gt;`则追加到文件末尾。 5. 管道(|):管道符号允许我们将一个命令的STDOUT作为另一个...

    重定向标准输出STDOUT的demo

    在Unix/Linux系统中,可以使用以下几种方式来重定向STDOUT: 1. **&gt;`file`**: 这将STDOUT重定向到`file`,如果`file`已存在,其内容会被清空;若不存在,会创建新文件。 2. **&gt;&gt;$file**:这将STDOUT追加到`file`,...

    standard-output-redirect.zip_redirect_stdout_stdout redirect_重定向

    然而,有时候我们需要将输出重定向到文件、另一个程序,甚至内存中,以便于调试、日志记录或集成到其他系统。通常,这可以通过调用`freopen()`函数来实现,但是这种方法可能受到一些限制,比如在某些情况下可能会...

    syslog-redirector:将 stdinstderr 重定向到 syslog

    一种静态编译工具,用于生成可执行文件,将其标准输出和标准错误重定向到 syslog。 静态编译很重要,至少在预期的 Helios/Docker 用例中,因为我们不想对容器的内容以及 libc 的可用性或位置做出任何假设。 具体来...

    python 打印信息重定向 GUI界面 ,PyQt5实时显示调用外部程序的实时输出显示,subprocess.Popen stdout输出重定向,备注详细!

    python 打印信息重定向 GUI界面 ,PyQt5实时显示调用外部程序的实时输出显示,subprocess.Popen stdout输出重定向,备注详细!

    linux中的重定向问题

    同时重定向标准输出和标准错误输出到同一个文件。 #### 知识点三:通过`system()`函数实现重定向 在C语言中,可以使用`system()`函数执行shell命令,从而实现重定向。例如: ```c #include int main() { system...

    7重定向-命令执⾏-脚本1

    通过使用各种重定向操作符,可以将命令的输入输出重定向到不同的文件、设备或其他目标,从而实现灵活的命令执行和数据处理。 BASH重定向命令执行脚本的基本语法规则是: 1. 语法分析结果为变量分配和重定向的words...

    linux中的重定向.pdf

    8. 文件描述符可以用于执行更复杂的重定向操作,比如使用"n&gt;&-"来关闭文件描述符n,使用"n来关闭输入文件描述符n,以及使用"n&gt;&m"来将文件描述符n的内容重定向到文件描述符m。 9. 在shell脚本中,命令组和子shell...

    文件重定向

    1. `&gt;`:用于覆盖文件内容,将stdout重定向到指定文件。 2. `&gt;&gt;`:追加模式,将stdout的内容追加到指定文件,不会覆盖原有内容。 3. `将指定文件内容作为stdin传递给命令。 4. `2&gt;`:将stderr重定向到指定文件,可以...

    Python伪装文件类对象输入输出重定向方法研究.pdf

    操作系统一般提供了基于文件的输入输出重定向功能,例如,可以将输入数据重定向到文件,将程序的输出重定向到另一个文件,以便于自动化评测。 Python程序在自动评测中,常常会用到操作系统提供的基于文件的输入输出...

    一文学会重定向.zip

    4. **合并输出**:`&&gt;`或`&gt;&`操作符可以同时重定向stdout和stderr到同一个文件。例如,`command &&gt; combined_output.txt`会将命令的所有输出,包括正常输出和错误,都写入combined_output.txt。 5. **管道符**:`|`...

    Linux操作之输入输出重定向和管道

    - **输出重定向**:例如,使用`&gt;`操作符可以将命令的输出重定向到文件中,覆盖原有文件内容。 ```bash $ ls &gt; ls.out ``` - **追加重定向**:使用`&gt;&gt;`操作符可以在不删除原有文件内容的情况下追加输出。 ```bash...

    Linux下重定向详解

    - `cmd &gt; file`:将标准输出重定向到文件`file`中。 - `cmd &gt;&gt; file`:将标准输出追加到文件`file`中。 - `cmd 2&gt;&1`:将标准错误输出重定向到与标准输出相同的位置。 - **输入重定向**: - `cmd 将文件`file`...

    第11章-重定向和文件的查找1

    例如,使用`&gt;`和`&gt;&gt;`符号进行输出重定向,将命令的输出保存到指定文件,`&gt;`覆盖文件原有内容,`&gt;&gt;`则追加到文件末尾。 3. **重定向**:除了输入输出重定向,还提到了管道(Pipeline)的使用,管道允许将一个命令的...

    Linux重定向_All.pdf

    在Linux系统中,重定向允许用户将命令的输出从默认位置(屏幕)重定向到文件中,或者将文件作为命令输入的来源,从而实现对输入输出流的精确控制。 1. 标准输入(stdin),标准输出(stdout)和标准错误(stderr) ...

    标准IO重定向和管道

    - `&&gt;`:将所有输出(包括标准输出和标准错误)重定向到一个文件。 这些操作可以通过以下格式实现: ```bash command [output redirection] ``` 其中,`command` 是需要执行的命令,`[output redirection]` 是...

    易语言重定向输入输出源码

    在学习易语言重定向输入输出时,建议先从简单的示例开始,如将输出重定向到文件,然后再尝试更复杂的操作,如从文件读取数据并进行处理。同时,配合阅读“易语言入门教程”中的相关内容,可以更好地理解和掌握这些...

    Python伪装文件类对象输入输出重定向方法研究.zip

    例如,要将输出重定向到一个自定义的文件对象,可以使用`sys.stdout`的替换功能: ```python import sys # 创建伪装的文件对象 fake_file = StringIO() # 重定向输出 sys.stdout = fake_file # 写入内容 print(...

Global site tag (gtag.js) - Google Analytics