1. 尝试自行设计一个C语言小程序,完成最基本的shell角色:给出命令行提示符、能够逐次接受命令;对于命令分成三种,内部命令(例如help命令、exit命令等)、外部命令(常见的ls、cp等,以及其他磁盘上的可执行程序H
时间: 2023-12-03 13:46:29 浏览: 77
好的,我可以为您提供一个简单的C语言小程序,实现一个最基本的shell角色。以下是程序代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#define MAX_COMMAND_LENGTH 100
#define MAX_NUMBER_OF_ARGUMENTS 10
int main()
{
char command[MAX_COMMAND_LENGTH];
char* arguments[MAX_NUMBER_OF_ARGUMENTS];
int status;
while (1)
{
printf(">> ");
fgets(command, MAX_COMMAND_LENGTH, stdin);
command[strcspn(command, "\n")] = 0;
if (strcmp(command, "help") == 0)
{
printf("This is a basic shell program.\n");
printf("You can enter commands like ls, cp, etc.\n");
}
else if (strcmp(command, "exit") == 0)
{
exit(0);
}
else
{
pid_t pid = fork();
if (pid < 0)
{
printf("Error: fork failed.\n");
exit(1);
}
else if (pid == 0)
{
// Child process
char* token = strtok(command, " ");
int i = 0;
while (token != NULL && i < MAX_NUMBER_OF_ARGUMENTS - 1)
{
arguments[i++] = token;
token = strtok(NULL, " ");
}
arguments[i] = NULL;
execvp(arguments[0], arguments);
// If execvp returns, it means that an error occurred
printf("Error: command not found.\n");
exit(1);
}
else
{
// Parent process
waitpid(pid, &status, 0);
}
}
}
return 0;
}
```
该程序实现了一个简单的shell,可以接收命令并执行内部或外部命令。当用户输入"help"时,程序会输出一些简单的提示信息。当用户输入"exit"时,程序会退出。
对于其他命令,程序会创建一个子进程并调用execvp函数来执行该命令。如果命令不存在,则子进程会返回一个错误,此时程序会输出一个错误信息。
请注意,该程序只是一个简单的示例,没有考虑安全性和错误处理等问题。在实际应用中,需要进行更多的测试和改进。