SHELL, сохранить вывод эха в файл (код c)? - PullRequest
0 голосов
/ 09 декабря 2010

Я пытался написать программу оболочки (на языке 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 ]

2 голосов
/ 09 декабря 2010

Вы должны отделить проверку на перенаправление от самой команды.Сначала выполните цикл проверки перенаправления:

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 голос
/ 09 декабря 2010

Откройте файл с именем foo1 для записи, запишите его содержимое и закройте файл.

0 голосов
/ 09 декабря 2010

Вы не можете использовать <fstream> в программе на Си;это заголовок C ++.

Вам нужно будет использовать <stdio.h>, и вам нужно будет использовать fprintf(), а не просто printf().Вы открываете файл ('foo1') и пишете в него вместо стандартного вывода.Таким образом, у вас будет «текущий выходной файл», который вы можете направить на стандартный вывод по умолчанию, но на другие файлы по требованию.

0 голосов
/ 09 декабря 2010

Похоже, вы связываете логику вывода с логикой команд, которая не будет работать так хорошо, если у вас более одной команды.После того, как вы обработали строку, сначала напишите логику эха, как в «скопировать ее параметры в output», а затем решите, что делать с output (запись в файл или печать на экран).

Конечно, это очень простой подход к написанию оболочки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...