我正在为bash
中的c
命令实现一个简单的shell。
我已经解析了我想要使用的行(我存储了来自stdin
的输入
进入char**
数组)。现在我离开时要注意以下情况:
{ >, <, >> , & , | }
小于,大于重定向,在后台和管道中运行命令。
我想了解一些事情,如果我想这样做:
someApplication > file
或
someApplication < file
或
someApplication >> file
为了实施这些案件,forking
会有什么好处吗? (意思是father
&amp; son
进程的使用)
我看到它的方式,只有当我有一个管道,如ls|grep great
,然后fork
才会更有效率,因为一个进程会在目录中显示文件,而另一个进程一个人会使用儿子的输入来完成管道的右侧。
谢谢。
编辑:
void handleLessThan(char** arguments , int * argumentsCount)
{
int fd_fork = fork();
int fd_sourceFile;
char sourceFile[30];
if (fd_fork == 0) // son is running now
{
strcpy(arguments[*argumentsCount],sourceFile);
fd_sourceFile= open(sourceFile, O_RDONLY);
dup2(fd_sourceFile, 0); .
execvp(arguments[0],arguments[1]);
}
else
{
// parent
??
}
}
答案 0 :(得分:4)
在Unix中创建流程的唯一标准方法是fork
。
现在已经不在了,我建议您为command > file
案例做点什么:
open(2)
fork(2)
新流程execvp(3)
之前,使用dup2
将STDOUT_FILENO
重定向到第一步获得的文件描述符根据编辑问题:
strcpy
参数可能已被撤消wait(2)
或waitpid(2)