C语言之流的重定向

写c的小程序断不了需要输入输出,手动输入可太麻烦了。下面介绍IO的重定向方式:


1.重定向标准输入输出和错误,直接在命令行使用符号< > 2> >> 2>>等,还可使用2>&1将标准错误重定向到标准输出(两个大于号表示追加)
如下面执行main程序:
main < data.txt >answer.csv 2> error.log

2.在程序代码中使用freopen(文件路径,打开模式,stdin/stdout/stderr)进行重定向,配合使用main函数的参数来传递文件名(路径)。

3.使用dup2(fileno1,fileno2)
每用fopen()打开一个文件,操作系统都会在描述符表中新注册一项,产生一个文件描述符(类型为FILE*)fp,fileno(fp)函数返回描述符的编号(0~255)。
一般情况下0,1,2是固定的分配给标准输入、输出、错误,之后的号码按使用时顺序分配,如数据库连接,网络连接的流。
dup2(4,3)表示将4号数据流复制(覆盖)到3号
形如dup2(fd[1],1)将标准输出设为管道的写入端
dup2(fileno(fp),1),重定向标准输出到文件(这里的文件可以指普通文件,也可以理解为LINUX中的一切设备皆文件的概念)
在linux上还可以打开/dev/tty,将数据直接发送到终端

你还可以写个脚本来执行你的程序,免去了不断的输入来进行测试。

C语言之流的重定向,布布扣,bubuko.com

时间: 2024-10-11 13:27:15

C语言之流的重定向的相关文章

LINUX-----管道流及重定向

1.管道流 在linux中  | 符号代表管道流 用法:command1 | command2 第一个命令的标准输出将作为第二个命令的标准输入 例:cat a.txt | grep "abc" 2.IO流 stdin --- 标准输入流,描述符为0 stdout --- 标准输出流,描述符为1 stderr --- 标准错误流,描述符为2 3.重定向 输出: n>  重定向--覆盖 例:cat a.txt 1>stdout.txt 将cat a.txt 的输出内容重定向到s

java Print流 和 重定向

可视化编辑器,alt+1到9键,切换到工具区,tab键,选择按钮,esc键,返回编辑 public class TestIO { public static void main(String[] args) {  String filename = "D:" + File.separator + "hello.txt";  File file = new File(filename);    System.out.println("标准输出 -- 控制台&

【Linux探索之旅】第三部分第二课:流、管道、重定向,三管齐下

内容简介 1.第三部分第二课:流.管道.重定向,三管齐下 2.第三部分第三课预告:监视系统活动,滴水不漏 流.管道.重定向,三管齐下 这一课我们来学一些非常有用的内容,而且相当有意思,而且内容很多,而且有可能颠覆你的三<观>(毕竟三管齐下,不颠覆三观也难). 今天的标题中的三个名称,听上去就怪怪的.什么流,管道,重定向,都啥玩意啊.不过希望学完这课,大家能够有拨云见雾的感觉. 到目前为止,我们已经学习了不少Linux的命令了,也已经比较熟悉命令行的用法了.其最基本用法是这样的: 在终端输入命令

25 Java学习之标准I/O流重定向

Java的System类提供了一些简单的静态方法调用,以允许我们对标准输入.输出和错误I/O流进行重定向: setIn(InputStream) setOut(PrintStream) setErr(PrintStream) 如果我们突然开始在显示器上创建大量输出,而这些输出滚动得太快以至于无法阅读时,重定向输出就显得极为有用(比如重定向到一个文件中进行输出阅读) 一. 三个静态变量 System.in (默认从键盘输入) System.out(默认输出到显示器) System.err 二. 重

java I/O进程控制,重定向 示例代码

package org.rui.io.util; import java.io.*; /** * 标准I/O重定向 */ public class Redircting { public static void main(String[] args) throws IOException { String path="D:\\Users\\liangrui\\workspace\\thinking\\src\\org\\rui\\io\\util/"; PrintStream cons

Java基础学习笔记【10】打印流、管道流

ByteArrayInputStream和ByteArrayOutputStream内存流,操作基本和文件流其他流差不多,主要使用在程序需要用临时文件,关闭内存流是无效的所以不用关闭 操作流,不管是什么流,最保险的方式,就是最后都close一下 内存流: ByteArrayInputStream.ByteArrayOutputStream.CharArrayReader. CharArrayWriter: 打印流: 1 2 3 4 5 6 PrintStream: print(Object o)

C语言之setjmp和longjmp详细剖析

我希望看这篇文章的你对C++的传统异常处理,即try...catch...throw有了解(不是Windows SEH),这样才能方便你最深入的理解这2个C语言的反人类函数. 当然如果不了解就先看下面的"C++式的异常处理",如果感觉自己了解了,可以直接skip看到"C语言中的模拟". [C++式的异常处理] 首先,我们写一个类,请不要想这个类有什么特别的地方,其只是为了打印出来构造和析构. class CFoo { public: CFoo() { printf(

tlcl-redirection(重定向)

重定向(redirection) 所谓的重定向可以简单的理解为重新指定输入输出的方向,既然是重新制定输入输出的方向,那么原来的输入输出方向是如何的呢? 计算机的I/O有标准输入.标准输出.输出错误,默认的标准输入是与键盘相连接的,标准输出是与屏幕相连接的,至于输出错误也是默认连接到屏幕. 而I/O重定向可以允许我们更改这些默认连接,从文件中读取内容,将输出写入到文件等等,都是重定向. 1.重定向标准输入 ls命令默认将输出连接到屏幕,我们可以通过>重定向操作符改变输出 ls  > ls-out

java语言程序

第一章 Jave语言基础 1.1 Java语言的特点 领会Java语言的特点.关键字 1010-11.Java语言采用多种机制来保证可移植性,其中最主要的是______.虚拟机 1110-11.Java语言是一种 ____强类型语言___ 语言,它约束程序员必须遵守规定编写程序,能让编译器检测出程序中尽可能多的错误. 1.2 Java应用程序和小应用程序 识记      Java应用程序与小应用程序的特点和区别 11.一个应用程序必须在某个类中定义的方法是______.main() 1201-