当前位置:  技术问答>linux和unix

自己编写的的shell不能执行外部命令

    来源: 互联网  发布时间:2017-02-26

    本文导语:  #include #include #include #include #include #include  #define MAXLINE 128 #define MAXARGC 128 typedef struct PC { char pc_name[20]; pid_t t; //int state; struct PC *next; }Process; Process *head; extern char **environ;  char p[][20] = {"cd","environ","echo","help",...

#include
#include
#include
#include
#include
#include 
#define MAXLINE 128
#define MAXARGC 128
typedef struct PC
{
char pc_name[20];
pid_t t;
//int state;
struct PC *next;
}Process;
Process *head;
extern char **environ; 
char p[][20] = {"cd","environ","echo","help","jobs"};
void cmdLine_Analyse(char *cmdLine,char **argv,char cmd[]);
int cmdRun(char **argv,char cmd[]);
int cd_fun(char **argv);
void environ_fun();
void echo_fun(char **argv);
int help_fun();
int jobs_fun(char **argv);
int Is_Outcmd(char **argv);
void CreateProcessNode();
void InsertProcessNode(char *cmd,pid_t t);
void DeleteProcessNode(pid_t pid);
static void wait_child(int sig_type);
void set_singnal();
int new;
///////////////////////////////////////////main//////////////////////////////
int main()
{
//process Pcb;
char *argv[MAXARGC];
char dir[MAXARGC];
char cmdLine[MAXLINE];
char cmd[MAXARGC];
int n = 0,i;
CreateProcessNode();
while(1) 
{
printf("[%s]$PS1",get_current_dir_name());
gets(cmdLine);
//strcpy(cmdLine,"date");
if(cmdLine[strlen(cmdLine) - 2] == '&')
new = 1;
if(!strcmp(cmdLine,"quit") || !strcmp(cmdLine,"exit") || !strcmp(cmdLine,"bye"))
break;
cmdLine_Analyse(cmdLine,argv,cmd);
cmdRun(argv,cmd);
}
return 0;
}
///////////////////////////////////////////////signal///////////////////////////////////////////////////////////
static void wait_child(int sig_type)
{
int status;
pid_t pid = wait(&status);
        DeleteProcessNode(pid);
}

void set_signal()
{

if (signal(SIGCHLD, wait_child) == SIG_ERR) {
perror("Signal");
exit(EXIT_FAILURE);
}
}
/////////////////////////////cmdLine_devide////////////////////////////////////////
void cmdLine_Analyse(char *cmdLine, char **argv,char cmd[] )
{
char *temp;
temp  = strtok(cmdLine , " ");
int argc = 0;
while(temp != NULL)
{
if(argc == 0)
{
strcpy(cmd,temp);
}
argv[argc++] = temp; 
temp = strtok(NULL," ");
}  
if(!strcmp(argv[argc-1],"&"))
{
argv[argc - 1] = '';
new = 1;
}
else
argv[argc] = NULL;
}
///////////////////////////////cmdRun/////////////////////////////////////////
int cmdRun(char **argv,char cmd[])
{
int i;
for(i = 0;i pc_name,q->t);
q = q->next;
}
}
/////////////////////////////////Record///////////////////////////////////
void CreateProcessNode()
{
head = (Process *)malloc(sizeof(Process));
strcpy(head->pc_name,"shell");
head->t = 0;
head->next = NULL;
}
void InsertProcessNode(char *cmd,pid_t t)
{
Process *q;
q = (Process *)malloc (sizeof(Process));
strcpy(head->pc_name,cmd);
q->t = t;
q->next = head->next;
head->next = q;
}
void DeleteProcessNode(pid_t pid)
{
Process *q,*temp;
temp = q = head;
while(q->t == pid)
{
temp = q;
q = q->next;
}
temp->next = q->next;
free(q);
}

|
怎么个不能执行法??

|
你这是C程序。你所谓的“不能执行”不会是指不能像shell脚本那样写完了就可以执行吧?

    
 
 

您可能感兴趣的文章:

  • 如何在我的C语言编写的程序里面执行命令行命令,比如ls -la ??
  • AIX下如何编写批处理命令和计划任务
  • 如何用SHELL编写自定义的命令??
  • Linux下如何用C语言编写命令行下的菜单
  • C++编写FTP客户端解析LIST命令获取目录不完整,求解。 iis7站长之家
  • 新手问一个简单问题:用什么命令来结束自己编写的服务端程序
  • 在CMP中怎样编写类似于Update,delete等操作命令
  • 怎样让自己编写的程序成为命令
  • 如何在普通用户编写的shell脚本里面执行root用户才有的命令
  • 用记事本编写了一个Servlet,但在命令行中编绎时却说找不到包:
  • 求教:如何在用C++编写的server中调用Linux命令
  • 如何编写Shell,当SQL执行完毕后,继续调用Shell命令。
  • 入门者的问题:我在UNIX的环境下,编写了c程my.c,编译后生成 my*,可是用什么命令执行这个程序呀?
  • Linux下一个gcc命令的编写,求教。
  • 我现在在编写一个在LINUX下运行的命令解释器,对于后台运行的命令方法有些不懂,请高手指点一下
  • 用jbuilder7编写成功运行正常的程序在用jdk中java命令执行出错,请帮忙!
  • 小弟编写了一个小例,shell中命令行参数和-z选项的错误
  • 请教关于编写一个shell命令的小.sh小程序
  • C++编写FTP客户端解析LIST命令获取目录不完整,求解。
  • 编写who命令的错误!
  • 100请教:如何编写脚本,执行某个目录下的所有可执行文件,并将其输出内容重定向到某个文件。(在线等)
  • 求教:编写一个bash脚本程序执行一个./file 程序
  • 如何编写服务程序,执行后返回到shell,但程序在后台运行?
  • 编写shell脚本执行远端windows的批处理
  • 这个自动执行的Shell如何编写?
  • 用GTK编写的程序程序,在我的机器上能用,并生成了可执行文件,可是!
  • 关于editplus的使用,编译完生成.class后,我又编写了html来执行applet,将其保存,如何经ie解释打开(直接在editplus上操作)不是显示html语言呀
  • 在编写驱动程序的时候,timer处理中,遇到了其他某timer处理例程以外的代码的执行。请指点,各位
  • 在编写Jsp的页面中,提交和传递参数是怎样执行的?
  • 如何在便编写一个makefile,使其编译时能产生可执行文件?急!谢谢帮忙!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 编写 linux shell 有什么好的编写工具呢?
  • VB编写的DLL不能被JAVA调用,用C将VB编写的DLL包装起来,做成一个新的DLL;用C编写的DLL可以被JAVA调用,用JAVA再进行一层的包装,因为JAV
  • 用Qt3.1.4编写的程序,如何加入自己编写的另外一个动态库呀?诚恳指教!!
  • 如图 scsi <---> scsi controller <---> pci <---> cpu 如果我想对scsi编写驱动我该对哪个部分编写?
  • 用什么工具编写JSP,可以象用InterDev编写ASP一样方便快捷?
  • 编写程序如编写人生,有人和我的意见相同吗?
  • 请问用jsp编写程序,非要编写代码么?有没有什么象fontpage2000那样的工具,能够生成一些固定模板的工具?就是说不用全部都写的工具。望
  • 用jsp编写web程序到底和java serverlet编写web程序有和区别
  • socket中,从client端(用java编写的)传到server端(用c编写的)的字符串为何总多一个ASCII码为10的字符呀?
  • 如何用java编写一个NT平台下的标准服务?
  • 关于用vj编写sniffer一问。
  • Linux下如何编写脚本文件
  • java能不能编写单独运行的程序?
  • Linux有没有类似bat文件,如何编写。
  • 用JAVA编写COM组件
  • 关于版本和bug管理的rule(规则)的编写
  • 在windows下可以用Code::Blocks编写linux程序吗?
  • 函数互相调用时Makefile编写
  • linux下用java编写邮箱客户端程序与在windows下有什么不同??
  • 怎么用JBuild编写java console程序


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3