模仿Linux 下的 shell 实现myshell 了解shell的简单实现机制
程序员文章站
2022-07-12 09:55:55
...
实现前准备:
1.读取用户输入的字符串 进行裁切处理 ,裁切时以空格为标志
char *fgets(char *s, int size, FILE *stream); // 从指定的流中读入
Under normal circumstances every UNIX program has three streams opened for it when it starts up, one for input, one for output,and one for printing diagnostic or error messages.
在正常情况下,每个UNIX程序都有三个流 它启动时为它打开,一个用于输入,一个用于输出,一个用于打印诊断或错误消息。
#include <stdio.h>
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;
2.
#include <string.h>
char *strtok(char *str, const char *delim);
简单调用实例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[]="ls -l -a";
char *p;
p=strtok(str," ");
printf("%s\n",p);
while((p=strtok(NULL," "))!=NULL)
printf("%s\n",p);
return 0;
}
在裁切 一个字符串时
第一裁切 要传入字符串的首地址 //p=strtok(str," ");
在对这个字符串进行第二次裁切时则可以把首地址赋值为 NULL //p=strtok(NULL," ")
3.fork()
fork - 创建子进程
头文件
#include <unistd.h>
函数原型 pid_t fork(void);
函数的返回值
0 //子进程
-1 出错
>0 父进程
调用实例
加 wait 后
4. wait
wait - await process completion //等待子进程结束
5.
int execvp(const char *file, char *const argv[]);
execvp 功能 替换一个进程的映象
myshell.c
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <string.h>
int main()
{
char buf[100];
char *p[100];
while(1)
{
printf("input:");//从终端输入字符串
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1]='\0';//去掉回车符并且给最后一位赋值\0
int i=1;
p[0]=strtok(buf," ");// 调用字符串裁剪函数
while((p[i]=strtok(NULL," "))!=NULL)
{
i++;
}
p[i]=NULL;
if(strcmp(*p,"quit")==0)
break;
pid_t pid;
if((pid=fork())<0)
{
perror("fork");
exit(EXIT_FAILURE);
}
else if(pid == 0)
{
if(execvp(p[0],p)<0)
{
perror("execvp");
exit(EXIT_FAILURE);
}
}
else
{
wait(NULL);//父进程不能先结束,给子进程收尸
}
}
exit(EXIT_SUCCESS);
}
实现效果
最后 谢谢张老师的指导!
上一篇: 递归函数
下一篇: matplotlib.pyplot
推荐阅读
-
Linux下使用Shell脚本实现ftp的自动上传下载的代码小结
-
Linux下实现SNMP一键安装的Shell脚本
-
Linux下实现SSH免密码登录和实现秘钥的管理、分发、部署SHELL脚本分享
-
linux下采用shell脚本实现批量为指定文件夹下图片添加水印的方法
-
Linux下如何实现shell多线程编程以提高应用程序的响应
-
Linux下shell脚本监控Tomcat的状态并实现自动启动的步骤
-
使用Python脚本在Linux下实现部分Bash Shell的教程
-
Linux下使用Shell脚本实现ftp的自动上传下载的代码小结
-
模仿Linux 下的 shell 实现myshell 了解shell的简单实现机制
-
Linux下实现SNMP一键安装的Shell脚本