📄 redirect.c
字号:
#include "dshell.h"/***************************************************************/
/***************************************************************/
/*函数:void redirectInOut(Cmd* pC, int* piid)
函数功能:设置输入输出文件重定向
函数参数:pC为命令数据结构,piid为文件描述符
函数返回值:无*/
void redirectInOut(Cmd* pC, int* piid)//文件重定向
{
int i=0;
int j=0;
for (i=0; i<pC->argc; i++)
{
if (pC->argv[i]!=NULL && (pC->argv[i])[0]=='<')
{
/*输入重定向*/
int fid;
char rname[100];
if ((pC->argv[i])[1]=='\0')
{
strcpy(rname, pC->argv[i+1]);
fid = open(rname, O_RDONLY);//打开文件
if (fid==-1)//打开失败
{
printf("Error opening input file!\n");
exit(2);
}
close(0);
dup(fid);
close(fid);
(pC->argv[i])[0]='\0';
(pC->argv[i+1])[0]='\0';
free(pC->argv[i]);
pC->argv[i]=NULL;
free(pC->argv[i+1]);
pC->argv[i+1]=NULL;
}
else
if ((pC->argv[i])[1]=='/' && (pC->argv[i])[2]=='\0')
{
close(0);
dup(piid[0]);
close(piid[1]);
(pC->argv[i])[0]='\0';
free(pC->argv[i]);
pC->argv[i]=NULL;
}
else
{
strcpy(rname, (pC->argv[i])+1);
fid = open(rname, O_RDONLY);
if (fid==-1)
{
printf("Error opening input file!\n");
exit(2);
}
close(0);
dup(fid);
close(fid);
(pC->argv[i])[0]='\0';
free(pC->argv[i]);
pC->argv[i]=NULL;
}
}
if (pC->argv[i]!=NULL && (pC->argv[i])[0]=='>')
{
/*输出重定向*/
int fid;
char rname[100];
if ((pC->argv[i])[1]=='\0')
{
strcpy(rname, pC->argv[i+1]);
fid = open(rname, O_WRONLY | O_CREAT);
if (fid==-1)
{
printf("Error accessing output file!\n");
exit(2);
}
close(1);
dup(fid);
close(fid);
(pC->argv[i])[0]='\0';
(pC->argv[i+1])[0]='\0';
free(pC->argv[i]);
pC->argv[i]=NULL;
free(pC->argv[i+1]);
pC->argv[i+1]=NULL;
}
else
if ((pC->argv[i])[1]=='/' && (pC->argv[i])[2]=='\0')
{
close(1);
dup(piid[1]);
close(piid[0]);
(pC->argv[i])[0]='\0';
free(pC->argv[i]);
pC->argv[i]=NULL;
}
else
{
strcpy(rname, (pC->argv[i])+1);
fid = open(rname, O_WRONLY | O_CREAT);
if (fid==-1)
{
printf("Error accessing output file!\n");
exit(2);
}
close(1);
dup(fid);
close(fid);
(pC->argv[i])[0]='\0';
free(pC->argv[i]);
pC->argv[i]=NULL;
}
}
}
for (i=0; i<pC->argc; i++)
{
int move=0;
for (j=0; j<pC->argc; j++)
{
if ((pC->argv[j])==NULL)
{
pC->argv[j]=pC->argv[j+1];
move=1;
}
if (move)
{
pC->argv[j]=pC->argv[j+1];
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -