【发布时间】:2011-03-31 15:51:20
【问题描述】:
我找遍了,找不到这个,我确定我在寻找错误的东西。
无论如何,我需要读入终端中给出的文件并输出字节码。如果我手动将文件名输入为 char*,我可以很容易地做到这一点,但我什至不知道如何从这个开始。
一个示例将在 linux 终端中:
$./a.out <test.exe
它应该将 test.exe 作为字节码打印到终端。提前感谢您的帮助。
【问题讨论】:
我找遍了,找不到这个,我确定我在寻找错误的东西。
无论如何,我需要读入终端中给出的文件并输出字节码。如果我手动将文件名输入为 char*,我可以很容易地做到这一点,但我什至不知道如何从这个开始。
一个示例将在 linux 终端中:
$./a.out <test.exe
它应该将 test.exe 作为字节码打印到终端。提前感谢您的帮助。
【问题讨论】:
通过命令行重定向,程序使用stdin 进行读取,使用stdout 进行写入。
编译并运行它,例如:./a.out < source.c, or ./a.out < source.c > 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;
}
【讨论】:
使用 bash 中的“
所以要读取一个字节,您应该只执行 getchar()。然后你可以用它做任何你想做的事情。文件结束时您将收到 EOF。
【讨论】:
当您使用 < 重定向输入时,您实际上将文件的内容作为标准输入提供,您可以将其视为标准输入,这意味着您不需要打开文件,而是使用 getchar() 例如阅读内容。
【讨论】:
当您在 shell 中使用文件重定向时,文件会通过管道传输到标准输入中。因此,您可以像往常一样使用getchar(或类似名称)从标准输入中读取数据。
您的程序无法(在标准 C 中)知道它是否正在输入文件,或者它是否在终端中以交互方式运行。最好的办法就是不要去想它。 :-)
【讨论】: