当前位置: 技术问答>linux和unix
我写的SHELL为什么不能退出?
来源: 互联网 发布时间:2015-11-04
本文导语: 我在RedHat Linux 9的环境下写了个Shell,为了应付课程设计。但是我发现这个Shell无论用Ctrl+C或Ctrl+或者exit都退不出去,请各位高手帮我改一下,谢谢啦,本人分不多,50分好了。给第一个改完我能调通的人。def.h在机房...
我在RedHat Linux 9的环境下写了个Shell,为了应付课程设计。但是我发现这个Shell无论用Ctrl+C或Ctrl+或者exit都退不出去,请各位高手帮我改一下,谢谢啦,本人分不多,50分好了。给第一个改完我能调通的人。def.h在机房忘了带回来了。
代码如下:
//shell.c
#include "def.h"
parse(void)
{
int i;
/* 1 */
command(0);
/* 2 */
if (check(""))
{
if (check(">"))
append = TRUE;
getname(outfile);
}
/* 5 */
if (check("&"))
backgnd = TRUE;
/* 6 */
if (check("n"))
return(i);
else
{
fprintf(stderr, "Command line syntax errorn");
return(ERROR);
}
}
initcold(void)
{
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
}
initwarm(void)
{
int i;
backgnd = FALSE;
lineptr = line;
avptr = avline;
infile[0] = '';
outfile[0] = '';
append = FALSE;
for (i = 0; iinfd!=0)
{
close(0);
dup(ptr->infd);
}
if (ptr->outfd!=1)
{
close(1);
dup(ptr->outfd);
}
/* 5 */
if (backgnd==FALSE)
{
signal(SIGINT, SIG_DFL);
signal(SIGQUIT, SIG_DFL);
}
/* 6 */
for (i = 3; iav[0], ptr->av);
exit(1);
}
}
execute(int j)
{
int i, fd, fds[2];
/* 1 */
if (infile[0]!='')
cmdlin[0].infd = open(infile, O_RDONLY);
/* 2 */
if (outfile[0]!='')
if (append==FALSE)
cmdlin[j-1].outfd = open(outfile, O_WRONLY | O_CREAT
| O_TRUNC, 0666);
else
cmdlin[j-1].outfd = open(outfile, O_WRONLY | O_CREAT
| O_APPEND, 0666);
/* 3 */
if (backgnd==TRUE)
signal(SIGCHLD, SIG_IGN);
else
signal(SIGCHLD, SIG_DFL);
/* 4 */
for (i = 0; i
代码如下:
//shell.c
#include "def.h"
parse(void)
{
int i;
/* 1 */
command(0);
/* 2 */
if (check(""))
{
if (check(">"))
append = TRUE;
getname(outfile);
}
/* 5 */
if (check("&"))
backgnd = TRUE;
/* 6 */
if (check("n"))
return(i);
else
{
fprintf(stderr, "Command line syntax errorn");
return(ERROR);
}
}
initcold(void)
{
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
}
initwarm(void)
{
int i;
backgnd = FALSE;
lineptr = line;
avptr = avline;
infile[0] = '';
outfile[0] = '';
append = FALSE;
for (i = 0; iinfd!=0)
{
close(0);
dup(ptr->infd);
}
if (ptr->outfd!=1)
{
close(1);
dup(ptr->outfd);
}
/* 5 */
if (backgnd==FALSE)
{
signal(SIGINT, SIG_DFL);
signal(SIGQUIT, SIG_DFL);
}
/* 6 */
for (i = 3; iav[0], ptr->av);
exit(1);
}
}
execute(int j)
{
int i, fd, fds[2];
/* 1 */
if (infile[0]!='')
cmdlin[0].infd = open(infile, O_RDONLY);
/* 2 */
if (outfile[0]!='')
if (append==FALSE)
cmdlin[j-1].outfd = open(outfile, O_WRONLY | O_CREAT
| O_TRUNC, 0666);
else
cmdlin[j-1].outfd = open(outfile, O_WRONLY | O_CREAT
| O_APPEND, 0666);
/* 3 */
if (backgnd==TRUE)
signal(SIGCHLD, SIG_IGN);
else
signal(SIGCHLD, SIG_DFL);
/* 4 */
for (i = 0; i