Shell命令在是最常用的一个和操作系统交互的工具。
shell命令的基本执行过程是:
1)从stdin来读取用户的command。
2)对command进行解析,并判断是否为buildin command
3)如果是buildin command则执行buildin command
4)如果非buildin command,则执行fork命令,然后在fork的子进程中执行execve创建新的program。
其中还涉及到对输入command进行parse的简单过程。
5)如果要对进程的切换fg, bg等。需要涉及到signal切换等。(暂时不支持)
一下是一个最简单的shell, 依赖书籍csapp.c 以及 csapp.h
/* Simple Shell command
* linux>gcc -o shellex shellex.c csapp.c -lpthread
*/
#include "csapp.h"
#define MAXARGS 128
/*Function prototypes */
void eval(char *cmdline);
int parseline(char * buf, char **argv);
int builtin_command(char **argv);
int main()
{
char cmdline[MAXLINE]; /* Command line */
while(1) {
/* Read */
printf("> ");
Fgets(cmdline, MAXLINE, stdin);
if(feof(stdin))
exit(0);