用C语言实现简单的shell程序,包括cd,clr,dir,echo,environ,help,pause,quit指令,并把这些命令传递给操作系统
时间: 2023-05-28 07:01:06 浏览: 134
以下是一个简单的shell程序的实现,可以执行cd,clr,dir,echo,environ,help,pause,quit指令:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define MAX_LEN 1024
void cd(char* to)
{
if (chdir(to) != 0) {
perror("cd error");
}
}
void clr()
{
printf("\033[2J\033[1;1H"); // clear screen
}
void dir()
{
system("ls");
}
void echo(char* text)
{
printf("%s\n", text);
}
void environ()
{
char* env = *environ;
while (env) {
printf("%s\n", env);
env = *(environ++);
}
}
void pause_prog()
{
printf("Press ENTER to continue...\n");
while (getchar() != '\n');
}
void help()
{
printf("cd <directory>\n");
printf("clr\n");
printf("dir\n");
printf("echo <text>\n");
printf("environ\n");
printf("help\n");
printf("pause\n");
printf("quit\n");
}
void quit()
{
exit(0);
}
int main()
{
char command[MAX_LEN];
while (1) {
printf(">>> ");
fgets(command, MAX_LEN, stdin);
command[strlen(command) - 1] = '\0'; // remove newline character
char* arg = strchr(command, ' ');
if (arg != NULL) {
*arg++ = '\0'; // separate command and argument
}
if (strcmp(command, "cd") == 0) {
cd(arg);
} else if (strcmp(command, "clr") == 0) {
clr();
} else if (strcmp(command, "dir") == 0) {
dir();
} else if (strcmp(command, "echo") == 0) {
echo(arg);
} else if (strcmp(command, "environ") == 0) {
environ();
} else if (strcmp(command, "help") == 0) {
help();
} else if (strcmp(command, "pause") == 0) {
pause_prog();
} else if (strcmp(command, "quit") == 0) {
quit();
} else {
printf("Invalid command\n");
}
}
return 0;
}
```
在主函数中,使用一个无限循环,用户输入一个命令后,使用strchr函数分离命令和参数,然后根据命令调用对应的函数,其中cd使用chdir系统调用来改变当前目录。quit使用exit函数来退出程序。其他函数中,利用system函数调用操作系统的命令来实现功能。注意在clr函数中,使用ANSI转义序列来清除屏幕。
阅读全文