我试图写一个shell程序(在c中)并遇到了以下问题。任何人都可以告诉我如何将echo
的输出保存到文件中。例如,有些人可能会输入echo document_this > foo1
,然后我想将document_this
保存到文件名foo1。
if(strcmp(myargv[0],"echo") == 0)
{
printf("Saving: %s in to a file", myargv[1]);
.
.
.
}
非常感谢任何帮助。不能使用#include <fstream>
,我还应该使用其他什么?感谢。
答案 0 :(得分:2)
您应该将重定向检查与命令本身分开。首先,循环检查重定向:
FILE* output = stdin;
for (int i = 0; i < myargc - 1; ++i)
if (strcmp(myargv[i], ">") == 0)
{
output = fopen(myargv[i + 1], "w");
myargc = i; // remove '>' onwards from command...
break;
}
// now output will be either stdin or a newly opened file
// evaluate the actual command
if (strcmp(myargv[0], "echo") == 0)
for (int i = 1; i < myargc; ++i) // rest of arguments...
{
fwrite(myargv[i], strlen(myargv[i]), 1, output);
// space between arguments, newline afterwards
fputc(i < myargc - 2 ? ' ' : '\n', output);
}
else if (... next command ...)
...
// close the output file if necessary
if (output != stdin)
fclose(output);
添加适当的错误检查作为练习。
答案 1 :(得分:1)
打开名为foo1
的文件进行写入,写入内容和关闭文件。
答案 2 :(得分:0)
您似乎将输出逻辑与命令逻辑捆绑在一起,一旦您有多个命令,这将无法正常工作。处理完行后,首先写入echo的逻辑,如“将其参数复制到output
”,然后决定如何处理output
(写入文件或打印到屏幕)。
当然,这是编写shell的一种非常基本的方法。
答案 3 :(得分:0)
您不能在C程序中使用<fstream>
;它是一个C ++标题。
您需要使用<stdio.h>
并且您需要使用fprintf()
而不仅仅是printf()
。您打开一个文件('foo1')并写入该文件而不是标准输出。因此,您将拥有一个“当前输出文件”,您可以默认将其指向标准输出,但可以根据需要指向其他文件。