资源简介
设计简单的命令行myshell,并能在实验环境下运行。
要求支持的命令如下:
1. cd [directory] 将当前目录改为 [directory]
2. environ 列出所有环境变量
3. ls 列出指定目录下所有文件
4. help 显示所有支持的命令
5. echo 在屏幕上显示参数并换行
6. quit 退出 shell
7. 支持I/O重定向
8. 常见的目录和文件操作,比如新建目录或文件,目录或文件的删除、复制,显示文件内容等。
上述基础功能满分70分,完成下面各功能并在文档中说明可得到加分,每项功能最多加10分:
1. 支持管道符操作
2. 不限制命令参数个数
3. 实现彩色输出
4. 支持其它一些常见的linux命令
5. 自己认为比较重要或能体现自己水平的功能
如果是嘉大的,想要资源直接找我拿,就不用去买积分,1563602991
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
// 保存当前的命令行输入
char line[256];
// 根据命令行输入等到的命令参数
char args[10][80];
// 命令参数个数
int narg;
int redir; //判断是否有重定向符号
char *file; //记录重定向目标文件
// 将命令参数拷贝到当前命令中
void copy_args(char* cmd_args[]) {
int i=0;
for (i; i < narg; i++) {
cmd_args[i] = args[i];
}
for( i=0; cmd_args[i] != NULL; i++ )
{
if( strcmp( cmd_args[i]“>“ ) == 0 ) //命令中有输出重定向
{
redir = 1;
}
}
if( redir == 1 ) //命令只含有一个输出重定向符号
{
for( i=0; cmd_args[i] != NULL; i++ )
{
if( strcmp( cmd_args[i]“>“ )==0 )
{
file = cmd_args[i+1];
cmd_args[i] = NULL;
}
}
}
}
// 执行 ls 命令
void exec_ls() {
int pid = fork();
int fd;
if (pid > 0) {
waitpid(pid NULL 0);
return;
}
char* cmd_args[10] = {};
copy_args(cmd_args);
if(redir == 1){ //如果命令有重定向
fd = open( fileO_RDWR | O_CREAT | O_TRUNC 0644 );
dup2( fd1 ); //指定新文件描述符为11为标准输出,0为标准输入
}
execv(“/bin/ls“ cmd_args);
}
// 执行 pwd 命令
void exec_pwd() {
char buffer[256];
getwd(buffer);
printf(“%s\n“ buffer);
}
// 执行 cd 命令
void exec_cd() {
if (narg != 2) return;
chdir(args[1]);
exec_pwd();
}
//执行environ 命令
void exec_env(){
execlp(“env“““NULL);
}
//echo 在屏幕上显示参数并换行
void exec_echo(){
char array[999];
int s= strlen(line);
for(int i=5;i {
array[i-5]=line[i];
}
printf(“%s\n“array);
}
//执行help
void exec_help(){
int pid = fork();
if (pid > 0) {
waitpid(pid NULL 0);
return;
}
system(“help“);
}
//创建文件
void exec_vi() {
int pid = fork();
if (pid > 0) {
waitpid(pid NULL 0);
return;
}
char* cmd_args[10] = {};
copy_args(cmd_args);
execvp(“vi“ cmd_args);
}
//创建文件夹
void exec_mkdir() {
int pid = fork();
if (pid > 0) {
waitpid(pid NULL 0);
return;
}
char* cmd_args[10] = {};
copy_args(cmd_args);
execvp(“mkdir“ cmd_args);
}
//删除文件夹和文件夹
void exec_rm()
{
int pid = fork();
if
- 上一篇:amd rx系列显卡驱动 580显卡驱动
- 下一篇:cuda地址.txt
相关资源
- 九个shell基础编程
- Shell脚本编程高清视频教程35集
- centos7 zabbix 一键安装脚本
- Shell脚本实现递归删除空文件夹
- 跟老男孩学linux三剑客命令
- DarkShell_无限制版_VIP专用版.rar
- sealyun k8s kubernetes 1.13.4 自动化安装脚
- BCM shell user manual
- Interop.Shell32.dll
- 模拟shell编程
- 使用fork(),exec(),dup2() pip
- 项目:UNIX Shell 和历史特点
- 30+个视频+shell脚本视频教程
- SessionImporter
- linux下shell编程
- HS8145V5_HS8145C5_019_shell+telnet+gbsig-OK.7z
- 利用API函数Shell_NotifyIcon在任务栏上放
- 简单的Shell编辑器Qt5
- Ericsson的moshell命令大全
- 远程进程通信+shell
- linux shell编程与服务器管理 范例程序
- 批量更改文件名和文件内容
- byshell
- Linux常用Shell脚本珍藏
- linux下shell编程实验报告-考勤系统
- 自己总结的Linux_Shell_脚本讲解+
- cve-2018-2628 exp getshell
- linux实验七 shell编程
- K8 weblogic-CVE-2018-2628-getshell工具
- Linux酒店客房管理系统shell实现
评论
共有 条评论