我已經實現了一個支持重定向的shell,但重新執行完成後,它獲得了我的shell。我怎樣才能以某種方式管理它以返回到shell(stdout)?如何在重定向後返回標準輸出?
int i;
for (i=1; args[i];i++)
{
if (strcmp(args[i],">")==0)
{
printf("argv[i] %s %d \n", args[i], i);
int out = open(args[i+1], O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IRGRP | S_IWGRP | S_IWUSR);
close(1);
int fdl=dup2(out,1);
close(out);
execvp(args[0],args);
// open(STDOUT, ">>", \$out); //doesn't work~!
}
}
這裏是當我執行我的外殼會發生什麼:
./basic_shell
mysh> pwd > out_pwd
argv[i] > 1
pwd: ignoring non-option arguments
,它創造out_pwd預期和PWD結果寫入它。 然而,當我嘗試
mysh>ls > out_ls
我收到此錯誤:
ls cannot access >: No such file or directory
能否請您給我如何解決它的一些提示嗎?
你能解釋更多,希望有一段代碼嗎? –
OP詢問有關POSIX C代碼,這個答案似乎與Windows有關。呼呼聲。 –
here ... http://stackoverflow.com/questions/1908687/how-to-redirect-the-output-back-to-the-screen-after-freopenout-txt-a-stdo –