shell的C输入循环

时间:2011-01-08 00:30:07

标签: c shell loops input

所以我正在创建一个非常简单的C程序,它只是预先形成shell命令。这就是我到目前为止所做的:

#include <stdio.h>
int main()
{
char input[30];
fputs("$ ", stdout);
fflush(stdout);
fgets(input, sizeof input, stdin);
system(input);
}

它有效,但只适用于一个命令。例如,如果我编译并输入./cmd,我会收到$ prompt。如果我输入ls,我会得到我应该得到的东西。但随后它退出并返回到常规系统shell。如何在用户输入命令之后将其返回到“$”输入。

3 个答案:

答案 0 :(得分:0)

您需要将代码放在循环中。例如:

int main()
{
    while (1) {
        char input[30];
        fputs("$ ", stdout);    
        fflush(stdout);
        fgets(input, sizeof input, stdin);
        system(input);
    }
}

while (1) { ... }是一个无限循环。退出这个的唯一方法是以某种方式杀死你的程序。为了能够使用命令退出循环,您需要在其中添加某种条件:

    while (1) {
        char input[30];
        fputs("$ ", stdout);    
        fflush(stdout);
        fgets(input, sizeof input, stdin);
        if (strcmp(input, "exit") == 0) {
            break;
        }
        system(input);
    }

strcmp()进行比较以查看您是否输入了“退出”。如果是,则break语句退出最近的循环,程序结束。

答案 1 :(得分:0)

您正在寻找的是循环;如果你想让退出条件由用户输入决定,实际上你可能需要在输入获取之后有一个无限循环(惯用方式是for(;;))和if导致{ {1}}如果您的情况得到满足。

break

退出条件可能涉及使用#include <stdio.h> int main() { char input[30]; for(;;) /* infinite loop */ { fputs("$ ", stdout); fflush(stdout); fgets(input, sizeof input, stdin); if(/* put here your exit condition */) break; /* breaks out of the loop */ system(input); } return 0; } (来自strcmp)来执行用户输入的字符串与退出命令之间的比较。

答案 2 :(得分:0)

你不想要任何循环,你想要一个do while循环,因为你总是想要执行system()命令至少一次。此外,通过将关键字exit作为您的中断条件,在致电input之前无需额外的代码来检查system(),因为exit将同时杀死您的shell和如果你使用strcmp()作为do-while条件语句,你的程序。

#include <stdio.h>
#include <string.h>

int main(void)
{
  char input[30];
  do {
    fputs("$ ", stdout);
    fflush(stdout);
    fgets(input, sizeof input, stdin);
    system(input);
  } while(strcmp(input,"exit\n"));

  return 0;
}

输出

[siegex@localhost]$ ./myshell
$ echo foo
foo
$ echo bar | sed 's/r/z/'
baz
$ exit
[siegex@localhost]$