【问题标题】:Reading a file bytes when given as < in terminal using C使用C在终端中以<形式读取文件字节
【发布时间】:2011-03-31 15:51:20
【问题描述】:

我找遍了,找不到这个,我确定我在寻找错误的东西。

无论如何,我需要读入终端中给出的文件并输出字节码。如果我手动将文件名输入为 char*,我可以很容易地做到这一点,但我什至不知道如何从这个开始。

一个示例将在 linux 终端中: $./a.out &lt;test.exe

它应该将 test.exe 作为字节码打印到终端。提前感谢您的帮助。

【问题讨论】:

    标签: c unix terminal


    【解决方案1】:

    通过命令行重定向,程序使用stdin 进行读取,使用stdout 进行写入。

    编译并运行它,例如:
    ./a.out &lt; source.c, or ./a.out &lt; source.c &gt; source.upper, ...

    #include <ctype.h>
    #include <stdio.h>
    int main(void) {
        int ch;
        while ((ch = getchar()) != EOF) {
            putchar((unsigned char)ch);
        }
        return 0;
    }
    

    另一方面,如果您想将文件名指定为命令行参数,则可以使用argv 来获取文件名,例如./a.out filename.txt

    #include <stdio.h>
    int main(int argc, char **argv) {
        if (argc > 1) {
            printf("processing %s\n", argv[1]);
        } else {
            printf("no command line parameter given.\n");
        }
        return 0;
    }
    

    【讨论】:

    • 非常感谢,你们都非常有帮助。
    【解决方案2】:

    使用 bash 中的“

    所以要读取一个字节,您应该只执行 getchar()。然后你可以用它做任何你想做的事情。文件结束时您将收到 EOF。

    【讨论】:

    • 感谢您的快速响应,它帮助了很多。
    【解决方案3】:

    当您使用 &lt; 重定向输入时,您实际上将文件的内容作为标准输入提供,您可以将其视为标准输入,这意味着您不需要打开文件,而是使用 getchar() 例如阅读内容。

    【讨论】:

      【解决方案4】:

      当您在 shell 中使用文件重定向时,文件会通过管道传输到标准输入中。因此,您可以像往常一样使用getchar(或类似名称)从标准输入中读取数据。

      您的程序无法(在标准 C 中)知道它是否正在输入文件,或者它是否在终端中以交互方式运行。最好的办法就是不要去想它。 :-)

      【讨论】:

        猜你喜欢
        • 2020-10-28
        • 1970-01-01
        • 2018-12-15
        • 1970-01-01
        • 2012-10-06
        • 1970-01-01
        • 2012-04-17
        • 2012-01-24
        • 1970-01-01
        相关资源
        最近更新 更多