【问题标题】:Redirecting stdin - C [duplicate]重定向标准输入-C [重复]
【发布时间】:2014-10-01 00:36:23
【问题描述】:

所以我打算通过执行以下命令来接受文本文件:

$ sort < list.txt 

我知道列表文本文件正在输入到我的排序程序中,但我如何实际使用程序中的信息?如何阅读?

我的代码:

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

int main(int argc, char** argv) {

    char c;   

    while (c != EOF){
        c = getchar();
        printf("%c ",c);
    }

   return (0);
}

例子:

$ ./sort.c < input.txt

./sort.c: line 3: $'\r': command not found

./sort.c: line 4: syntax error near unexpected token `('

'/sort.c: line 4: `int main(int argc, char** argv) {

【问题讨论】:

  • #include &lt;stdio.h&gt; 并从 stdin 读取。
  • 重定向是在你的程序之外发生的。 Shell 将负责在您的程序启动之前 打开list.txt 文件并将其连接到程序的标准输入。你的程序不需要做任何事情。你只会注意到isatty(STDIN_FILENO)如果你敢问它会返回0。
  • @5gon12eder 哦,我相信你成功了。我的评论告诉如何;您的评论解释了为什么,因此更具教育意义。我只是没想到——我早就知道重定向是如何工作的,就像一条鱼不注意水:)
  • @5gon12eder ,我该如何使用文本文件中的信息?
  • 现在我真的很困惑。你知道如何在没有重定向的情况下从标准输入中读取,@ImBadAtProgramming?如果是,一切都很好。如果没有,请按照 Tom Zych 所说的做(并编辑问题的标题)。

标签: c linux input stdin


【解决方案1】:

当您在命令行中使用您在帖子中所写的“&lt;”符号时,操作系统会为您读取文件并通过stdin 将内容提供给您的程序。所以,你需要做的就是从标准输入读取。

这里有一个很简单的代码sn-p来演示-

#include <stdio.h>

int main() {
    char line[256];
    FILE *fp = stdin;
    while(fgets(line, sizeof(line), fp) != NULL) {
        printf("%s", line);
    }
}

【讨论】:

    猜你喜欢
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    相关资源
    最近更新 更多