qiuqiuyaq 2021-08-22 21:32 采纳率: 97.9%
浏览 33
已结题

这句是什么意思呢?能不能解释下

img

  • 写回答

1条回答 默认 最新

  • StjpStjp 2021-08-22 21:47
    关注

    假设已经编译了 echo_eof.c 程序,并把可执行版本放入一个名为 echo_eof(或者在 Windows 系统中名为 echo_eof.exe)的文件中。

    该程序的运行情况和前面描述的一样,获取用户从键盘输入的输入。现在,假设你要用该程序处理名为 words 的文本文件。文本文件(text file) 是内含文本的文件,其中储存的数据是我们可识别的字符。文件的内容可以是一篇散文或者 C 程序。内含机器语言指令的文件(如储存可执行程序的文件)不是文本文件。由于该程序的操作对象是字符,所以要使用文本文件。只需用下面的命令代替上面的命令即可:echo_eof<words

    < 符号是 UNIX 和 DOS/Windows 的重定向运算符。该运算符是 words 文件与 stdin 流相关联,把文件中的内容导入 echo_eof 程序。echo_eof 程序本身并不知道输入的内容是来自文件还是键盘,它只知道这是需要导入的字符流,所以它读取这些内容并把字符逐个打印在屏幕上,直至读到文件结尾。因为 C 把文件和 I/O 设备放在一个层面,所以文件就是现在的 I/O设备。

    注意 重定向
    对于 UNIX、Linux 和 Windows 命令提示:<两侧的空格是可选的。一些系统,如AmigaDOS,支持重定向,但是在重定向符号和文件名之间不允许有空格。

    下面是一个特殊的 words 文件的运行示例, $ 是 UNIX 和 Linux 的标准提示符。在 Windows/DOS 系统中见到的 DOS 提示可能是 A> 或 C>。
    $ echo_eof < words
    The world is too much with us: late and soon,
    Getting and spending, we lay waste our powers:
    Little we see in Nature that is ours;
    We have given our hearts away, asordid boon!
    $

    2、重定向输出
    现在假设要用 echo_eof 把键盘输入的内容发送到名为 mywords 的文件中。然后,输入一下命令并开始输入:echo_eof>mywords

    符号是第 2 个重定向运算符。它创建了一个名为 mywords 的新文件,然后把 echo_eof 的输出(即,你输入字符的副本)重定向至该文件中。重定向把 stdout 从显示设备赋给 mywords 文件。如果已经有一个名为 mywords 的文件,通常会擦除该文件的内容,然后替换新的内容(但是,许多操作系统有保护现有文件的选项,使其成为只读文件)。所以出现在屏幕的字母都是你刚才输入的,其副本储存在文件中。在下一行的开始出按下 Ctrl+D(UNIX)或Ctrl+Z(DOS)即可结束该程序。如果不知道输入什么内容,可参照下面的示例。
    $ echo_eof>mywords
    You should no problem recalling which redirection
    operator does what. Just remember that each operator points
    in the direction the information flows. Think of it as
    a funnel.
    [Ctrl+D]
    $
    按下 Ctrl+D 或 Ctrl+Z 后,程序会结束,你得系统会提示返回。程序是否起作用了?UNIX 的 ls 命令或 Windows 命令行提示模式的 dir 命令可以列出文件名,会显示 mywords 文件已存在。可以使用 UNIX 或 Linux 的 cat 或 DOS 的 type 命令检查文件中的内容,或者再次使用 echo_eof,这次把文件重定向到程序:
    $ echo_eof<mywords
    You should have no problem recalling which redirection
    operator does what. Just remember that each operator points
    in the direction the information flows. Think of it as a
    funnel.
    $

    3、组合重定向
    现在,假设你希望制作一份 mywords 文件的副本,并命名为 savewords。只需输入一下命令即可:echo_eof < mywords > savewords

    下面的命令也起作用,因为命令与重定向运算符的顺序无关:echo_eof > savewords < mywords

    注意:在一条命令中,输入文件名和输出文件名不能相同。原因是 > mywords 在输入之前已导致原 mywords 的长度被截断为 0。

    总之,在UNIX、Linux 或 Windows/DOS 系统中使用两个重定向运算符(< 和 >)时,要遵循一下原则。

    重定向运算符链接一个可执行程序(包括标准操作系统命令)和一个数据文件,不能用于连接一个数据文件和另一个数据文件,也不能用于连接一个程序和另一个程序。
    使用重定向运算符不能读取多个文件的输入,也不能把输出定向至多个文件。
    通常,文件名和运算符之间的空格不是必须的,除非是偶尔在 UNIX shell、Linux shell 或 Windows 命令行提示模式中使用的特殊含义的字符。
    以上介绍的都是正确的例子,下面来看一下错误的例子,addup 和 count 是两个可执行程序,fish 和 beets 是两个文本文件:
    fish > beets(违反第1条规则)
    addup < count(违反第1条规则)
    addup < fish < beets(违反第2条规则)
    count > beets fish(违反第2条规则)

    UNIX Linux 或 Windows/DOS 还有 >> 运算符,该运算符可以把数据添加到现有文件的末尾,而 | 运算符能把一个文件的输出连接到另一文件的输入。

    4、注释
    重定位让你能使用键盘输入程序文件。要完成这一任务,程序要测试文件的末尾。例如,第 7 章演示的统计单词程序,计算单词个数直至遇到第 1 个 | 字符。把 ch 的 char 类型改成 int 类型,把循环测试中的 | 替换成 EOF,便可用该程序来计算文本文件的单词量。

    重定向是一个命令行概念,因为我们要在命令行输入特殊的符号发出指令。如果不使用命令行环境,也可以使用重定向。首先,一些集成开发环境提供了菜单选项,让用户指定重定向。其次,对于 Windows 系统,可以打开命令提示窗口,并在命令行运行科执行文件。Microsoft Visual Studio 的默认设置是把可执行文件放在项目文件夹的子文件夹,称为 Debug。文件名和项目名的基本名相同,文件名的扩展名为 .exe。默认情况下,Xcode 在给项目命名后才能命名可执行文件,并将其放在 Debug 文件夹中。在 UNIX 系统中,可以通过 Terminal 工具运行可执行文件。从使用上看,Terminal 比命令行编译器(GCC 或 Clang)简单。

    如果用不了重定向,可以用程序直接打开文件。如下程序,待读取文件应该与可执行文件位于同一目录。

    #include <stdio.h>
    #include <stdlib.h> // 为了使用 exit()
    int main(void)
    {
        int ch;
        FILE *fp;
        char fname[50]; // 储存文件名
    
        printf("Enter the name of the file: ");
        scanf("%s",fname);
        fp = fopen(fname,"r"); // 打开待读取文件
        if(fp == NULL) // 如果失败
        {
            printf("Failed to open file. Bye\n");
            exit(1); // 退出程序
        }
        while((ch = getc(fp)) != EOF)
            putchar(ch);
        fclose(fp); // 关闭文件
        return 0;
    }
    
    
    

    小结:如何重定向输入和输出
    绝大部分 C 系统都可以使用重定向,可以通过操作系统重定向所有程序,或只在 C 编译器允许的情况下重定向 C 程序。假设 prog 是可执行程序名,file1 和 file2 是文件名。

    把输出重定向至文件:>
    prog > file1

    把输入重定向至文件:
    prog < file2

    组合重定向:
    prog < file2 > file1
    prog > file1 < file2
    这两种形式都是把 file2 作为输入、file1 作为输出。
    留白:
    一些系统要求重定向运算符左侧有一个空格,右侧没有空格。而其他系统(如、UNIX)允许在重定向运算符两侧有空格或没有空格。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月31日
  • 已采纳回答 8月23日
  • 创建了问题 8月22日

悬赏问题

  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥30 ppOCRLabel导出识别结果失败
  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗