`
linguanghuan
  • 浏览: 3974 次
社区版块
存档分类
最新评论

标准输入复制到标准输出

 
阅读更多
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

#define BUFFSIZE 4096

int main(void)
{
        int n;
        char buf[BUFFSIZE];
        while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)
                if (write(STDOUT_FILENO, buf, n) != n)
                        printf("write error\n"); exit(1);
        if (n < 0)
                printf("write error\n");

        exit(0);
}

 

运行结果
[lingh@test advanced_unix]$ in2out
rrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

 

 

知识点:

read()  write()  STDIN_FILENO STDOUT_FILENO   在头文件unistd.h中

read 返回读得字节数 到达文件尾端 read返回0, 发生错误返回-1

open read write lseek close 提供了不用缓存的IO,这些函数都使用文件描述符

STDIN_FILENO是文件描述符,与stdin的差别, stdin是FILE* 类型的在头文件stdio.h中

stdio.h 写道
extern struct _IO_FILE *stdin; /* Standard input stream. */
extern struct _IO_FILE *stdout; /* Standard output stream. */
extern struct _IO_FILE *stderr; /* Standard error output stream. */

 

 

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        int c;
        while ((c = getc(stdin)) != EOF)
                if (putc(c, stdout) == EOF)
                        printf("output error\n"); exit(1);
        if (ferror(stdin))
                printf("input error\n");
        exit(0);
}

 

 运行结果:

[lingh@test advanced_unix]$ gcc -o getc2putc getc2putc.c
[lingh@test advanced_unix]$ getc2putc
3333333333333333
3333333333333333
5555555555555555555
5555555555555555555
^C

 

 知识点

1. stdin stdout EOF  getc  putc  ferror 在stdio.h中

#ifndef EOF
# define EOF (-1)
#endif

 

 

分享到:
评论

相关推荐

    JAVA输入输出流实验报告

    实验一中,我们看到如何使用字符流进行标准输入输出的处理。这里用到了`InputStreamReader`和`BufferedReader`。`InputStreamReader`是字节流到字符流的桥梁,它将来自`System.in`的标准输入转换为字符流。接着,`...

    标准输入输出及重定向PPT学习教案.pptx

    标准错误输出(stderr,2)则用来显示错误信息,同样默认输出到显示器。这三个流独立工作,使得错误信息不会混淆正常输出。 2. 重定向 重定向允许我们改变数据的输入和输出路径,提升命令行操作的灵活性。 - ...

    linux脚本编写基础

    - `tee`: 将标准输入复制到标准输出和文件。 - `basename`、`dirname`: 获取文件名或路径名称。 - `head`、`tail`: 显示文件的头部或尾部内容。 - `sed`: 对文件进行流编辑。 - `awk`: 处理文本数据。 #### 条件...

    Linux Shell脚本编写基础

    - `tee`: 将标准输入复制到标准输出和文件。 - `basename`: 返回文件名部分。 - `dirname`: 返回文件的目录部分。 - `head`: 显示文件头部。 - `tail`: 显示文件尾部。 - `sed`: 流编辑器,用于文本过滤和转换。 - `...

    Linux 脚本编写基础

    - **tee**: 将标准输入复制到标准输出及文件。 - **basename**: 返回路径的基名。 - **dirname**: 返回路径的目录名。 - **head**: 显示文件的前几行。 - **tail**: 显示文件的后几行。 - **sed**: 文本流编辑...

    Java 输入输出流 源码

    10. **标准输入输出流**:System.in代表标准输入(键盘),System.out代表标准输出(屏幕),System.err代表错误输出(通常也是屏幕)。 在你的Java作业中,你可能会被要求创建和使用这些不同的流类型,比如实现...

    LINUX输入输出与文件

    标准输入(`stdin`)、标准输出(`stdout`)和标准错误(`stderr`)是预定义的文件指针。通常,`scanf()`和`printf()`分别用于从标准输入读取和向标准输出写入。 ### 2. 基于文件描述符的文件操作(非缓冲) #### 2.1. ...

    文件管理和输入输出流.rar

    C语言使用标准输入输出函数,如`scanf()`、`printf()`,并可通过`&lt;stdio.h&gt;`中的`fread()`和`fwrite()`处理文件流。C#的`StreamReader`和`StreamWriter`以及`BinaryReader`和`BinaryWriter`分别对应字符和二进制的...

    编程实现先从标准输入中读取字符串,然后将字符串存到文件file1中,最后再将文件file1中的内容读取另存到文件file2中等功能。

    在Java编程中,实现从标准输入流(Standard Input Stream)读取字符串,然后将这些字符串写入文件,以及从文件中读取内容并保存到另一个文件的功能,涉及到多个核心概念和API。以下是对这些知识点的详细说明: 1. *...

    C++实现将输入复制到输出的方法

    本篇文章将详细讲解如何实现将输入复制到输出,并在此过程中处理特定字符的转换。我们将通过两个不同的实例来探讨这个主题。 首先,我们要解决的是将输入的文本复制到输出,同时替换特定字符。在这个例子中,我们将...

    linux下输入输出重定向.docx

    例如,mysh &gt; mylog.txt 2&gt;&1 就可以将标准输出和错误输出都重定向到 mylog.txt 文件中。 此外,我们还可以使用 /dev/null 来忽略标准输出或错误输出。例如,mysh &gt; /dev/null 2&gt;&1 就可以忽略标准输出和错误输出。...

    Java输入输出流

    Java预定义了三个标准流:`System.in`(标准输入)、`System.out`(标准输出)和`System.err`(错误输出)。它们通常与键盘、显示器和错误日志关联。 ### 打包与解包流(GZIPOutputStream, GZIPInputStream) 用于...

    从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。输入的字符串以“!”结束.

    这个过程可以通过使用标准库函数 `fopen`、`fputc` 和 `fclose` 实现。 首先,我们使用 `fopen` 函数打开文件,指定文件名和打开模式(在这里是写入模式)。如果打开成功,那么 `fopen` 函数将返回一个文件指针,...

    C++大学教程输入输出流代码

    `iostream`库是C++标准库的一部分,包含了基本的输入输出流对象,如`cin`用于标准输入,`cout`用于标准输出。`cin`常用来从键盘读取数据,而`cout`则用于打印信息到控制台。例如,简单的输入输出操作可以这样表示: ...

    Java实验五输入输出流

    从标准输入接收学生信息(如学号、姓名等),当输入“bye”时结束,将信息保存到`myfile1.txt`。 3. 将`myfile1.txt`的内容复制到`myfile2.txt`。 - **关键步骤**: - 使用`BufferedReader`从控制台读取输入。 -...

    字符型数据的输入输出

    在C++中,`cin`和`cout`用于处理标准输入和输出。对于`char`类型的字符,可以直接使用`cin &gt;&gt; charVar;`来输入,`cout ;`来输出。但对于字符串,使用`cin`和`cout`操作时需要注意: - 输入:`cin &gt;&gt; str;`会读取...

    详细的Linux输入输出与文件.pdf

    本文将详细介绍Linux下的标准输入、标准输出以及文件操作的基本概念和技术。 #### 二、基于文件指针的文件操作(缓冲) 在Linux中,基于文件指针的文件操作是一种常用的方法,它使用了缓冲区来提高文件读写的效率...

    teeProgram:该程序从标准输入获取输入并将其输出到标准输出和运行时指定的文件

    Streams 阅读和 Tee 计划 该程序应该从标准输入获取输入并将其输出到标准输出和运行时指定的文件。 示例:节点 tee outputfile.txt 将回显用户提供的输入并将其复制到 outputfile.txt 文件中

    C++文件输入输出的使用

    - **插入操作符`重载**:这是最常用的输出方式,可以将各种简单类型的数据(如整型、浮点型、字符串等)直接输出到文件。例如,在例1中,通过`fout 将0到20的整数写入文件。如果要输出自定义类型的数据,需要重载`...

    Linux下重定向详解

    - `将标准输入复制自文件描述符`n`。 - `关闭标准输入。 - `&gt;&-`:关闭标准输出。 - **特定文件描述符的操作**: - `2&gt; file`:运行命令并将错误输出重定向到`file`。 - `2&gt;&1`:运行命令并将标准输出和错误...

Global site tag (gtag.js) - Google Analytics