SHELL,将echo的输出保存到文件中(c代码)?

时间:2010-12-09 02:49:25

标签: c shell unix

我试图写一个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>,我还应该使用其他什么?感谢。

4 个答案:

答案 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')并写入该文件而不是标准输出。因此,您将拥有一个“当前输出文件”,您可以默认将其指向标准输出,但可以根据需要指向其他文件。