shell外部命令解析器
2016-01-21 09:26
621 查看
/* ************************************************************************
* Filename: shell.c
* Description:
* Version: 1.0
* Created: 2012年04月02日 18时52分12秒
* Revision: none
* Compiler: gcc
* Author: YOUR NAME (),
* Company:
* ************************************************************************/
于2012年04月09日修改后的代码:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/wait.h>
int main(int argc,char *argv[])
{
while(1)
{
pid_t pid;
char *p1=NULL,*p2=NULL,*p3=NULL; //指针要初始化
char *p4=NULL;
char str[100]=""; //这里要初始化或者用memset函数初始化
char *temp[100];
int i=0;
int status;
p1=getenv("USER"); //取得环境变量内容getenv()
p2=getenv("HOSTNAME");
p3=getenv("PWD");
p4=strrchr(p3,'/');
printf("[%s@%s %s]$",p1,p2,p4+1);
// gets(str);
/*可以代替下面的4句话
fgets(str, sizeof(str), stdin);//获取字符串
str[strlen(str)-1]='\0'; //把最后一位'\n'变成字符串结束标志'\0'
if(str[0]=='\0')
continue; //如果是输入回车的话,继续while循环
temp[i++]=strtok(str, " ");
while((temp[i++]=strtok(NULL," "))!=NULL); //字符串按空格切割
*/
fgets(str,100,stdin); //str用指针时要开辟空间,100可以用strlen测出str的长度来代替
temp[i++]=strtok(str," \n");
while((temp[i++]=strtok(NULL," \n"))!=NULL)
;
pid=vfork();
if(pid<0)
{
perror("fork\n");
}
else if(pid==0)
{
if(temp[0]==NULL)
{
exit(0);
}
execvp(temp[0],temp);
}
else
{
pid=wait(&status);
}
}
return 0;
}
* Filename: shell.c
* Description:
* Version: 1.0
* Created: 2012年04月02日 18时52分12秒
* Revision: none
* Compiler: gcc
* Author: YOUR NAME (),
* Company:
* ************************************************************************/
于2012年04月09日修改后的代码:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/wait.h>
int main(int argc,char *argv[])
{
while(1)
{
pid_t pid;
char *p1=NULL,*p2=NULL,*p3=NULL; //指针要初始化
char *p4=NULL;
char str[100]=""; //这里要初始化或者用memset函数初始化
char *temp[100];
int i=0;
int status;
p1=getenv("USER"); //取得环境变量内容getenv()
p2=getenv("HOSTNAME");
p3=getenv("PWD");
p4=strrchr(p3,'/');
printf("[%s@%s %s]$",p1,p2,p4+1);
// gets(str);
/*可以代替下面的4句话
fgets(str, sizeof(str), stdin);//获取字符串
str[strlen(str)-1]='\0'; //把最后一位'\n'变成字符串结束标志'\0'
if(str[0]=='\0')
continue; //如果是输入回车的话,继续while循环
temp[i++]=strtok(str, " ");
while((temp[i++]=strtok(NULL," "))!=NULL); //字符串按空格切割
*/
fgets(str,100,stdin); //str用指针时要开辟空间,100可以用strlen测出str的长度来代替
temp[i++]=strtok(str," \n");
while((temp[i++]=strtok(NULL," \n"))!=NULL)
;
pid=vfork();
if(pid<0)
{
perror("fork\n");
}
else if(pid==0)
{
if(temp[0]==NULL)
{
exit(0);
}
execvp(temp[0],temp);
}
else
{
pid=wait(&status);
}
}
return 0;
}
相关文章推荐
- Linux下shell(献给初学者)
- PowerShell技巧:使用XPath语法查询XML文件
- 一个下载网页图片的shell脚本
- [bash]create DB & table
- [bash]insert data into table
- [bash]read table
- bash 批处理命令
- Xshell下漂亮的开发环境配置
- shell脚本读取按行读取文本
- xshell工具介绍
- Adb Shell 下content使用
- shell脚本执行查找进程,然后查杀进程
- shell脚本结构示例
- 无聊乱搞:用shell脚本实现windows下cena的评测功能
- shell心得
- 树莓派的.bashrc和.bash_aliases文件
- shell编程-实例之输出系统信息
- Shell获取运营商IP段
- windows PowerShell 实战指南 读后感
- 在.bashrc中,使用python获取本机IP地址(现在只支持wlan)