POSIX shell 实现

含有后台运行功能,日后会不定期加入管道功能,历史记录功能 

#include <stdio.h> #include <unistd.h> #define MAX_LINE 80 void setup(char inputBuffer[], char *args[],int *background) { int length, i, start, ct; ct = 0; length = read(STDIN_FILENO, inputBuffer, MAX_LINE); start = -1; if (length == 0) exit(0); if (length < 0){ perror("error reading the command"); exit(-1); } for (i=0;i<length;i++) { switch (inputBuffer[i]) { case ' ': case '\t' : if(start != -1) { args[ct] = &inputBuffer[start]; ct++; } inputBuffer[i] = '\0'; start = -1; break; case '\n': if (start != -1) { args[ct] = &inputBuffer[start]; ct++; } inputBuffer[i] = '\0'; args[ct] = NULL; break; default : if (start == -1) start = i; if (inputBuffer[i] == '&') { *background = 1; inputBuffer[i] = '\0'; } } } args[ct] = NULL; / } int main(void) { char inputBuffer[MAX_LINE]; int background; char *args[MAX_LINE/2+1]; while (1) { background = 0; printf("COMMAND->\n"); setup(inputBuffer,args,&background); pid_t pid; pid = fork(); if (pid < 0) { fprintf(stderr, "Fork Failed"); exit(-1); } else if (pid == 0) { execvp(args[0], args); } else if (background == 1) wait(NULL); } }

转载于:https://www.cnblogs.com/seebro/archive/2011/08/29/2476555.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值