2014-04-11 69 views
0
int fd_redirect_to = open(token, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); 
close(1); //close stdout 

dup(fd_redirect_to); //new out 
char* line=NULL; 
size_t len=0; 

while(getline(&line,&len,input_f)!=-1) 
{ 

    line[strlen(line)-1]='\0'; //get rid of next line 

    char* arg[20]; //the most 20 arguments 
    int i=0; 
    char* token=NULL; 

    token=strtok(line,del); 
    while(token) 
    { 
     arg[i]=strdup(token); 
     ++i; 
     token=strtok(NULL,del); 
    } 

    arg[i]=(char*)0; 

    pid_t div=fork(); //give its own process 
    if(div==0) 
     execvp(arg[0],arg); 
    else if(div>0); 
    else 
     printf("error"); 
} 
close(fd_redirect_to); 

我想運行文件中的命令列表並將結果存儲到另一個文件中。提供的代碼是孩子。父母是我的外殼,要求用戶輸入。問題是執行此代碼後,我的父母的提示(「輸入命令:」)消失了。我認爲這是由「close(1)」造成的。它關閉stdout。我應該怎麼做才能再次打開stdout?我怎樣才能「再次打開」標準輸出?

回答

2

用途:

int saved = dup(STDOUT_FILENO); 
close(STDOUT_FILENO); 
dup2(fd_redirect_to, STDOUT_FILENO); 

... Now all stdout will go to fd_redirect_to 

... Now recover 

dup2(saved, STDOUT_FILENO); 
相關問題