所以我正在创建一个非常简单的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。如何在用户输入命令之后将其返回到“$”输入。
答案 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]$