2013-11-05 67 views
1

我在c中實現了一個shell,並且im很難將命令的輸出重定向到一個文件。 當我將輸出發送到一個文件,它似乎工作,但該文件未打開,當我運行ls -l命令它讓我看到以下內容:從命令行將輸出重定向到C文本文件

---------x 1 warp staff 441 Nov 4 20:15 output.txt 

這是我的一些代碼部分

pid = fork(); 
if(pid == 0) 
{ /* child process */ 

    if(redirFlag) 
    { 
     int fdRedir = open(redirectName, O_WRONLY | O_CREAT); 
     if(fdRedir < 0){ 
      perror("Can't Open"); 
      exit(1); 
     } 

     if(dup2(fdRedir, STDOUT_FILENO) == -1){ 
      perror("dup2 failed"); 
      exit(1); 
     } 


    } 
    execvp(supplement[0], supplement); 
    /* return only when exec fails */ 
    perror("exec failed"); 
    exit(-1); 

回答

2

open原型爲:

#include <fcntl.h> 
int open(const char *path, int oflag, ...); 

當創建文件時,你應該給文件模式。

​​

在你的代碼,文件被打開,旗O_CREAT但沒有給出文件模式。所以你沒有權限操作它。嘗試指示文件的權限時,創建新的文件:

int fdRedir = open(redirectName, O_WRONLY | O_CREAT, 0644); 
+1

+1:嚴格地說,原型['開放的()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/ open.html) 是'int open(const char * path,int oflag,...);',但最終結果與您所說的幾乎相同:如果指定了'O_CREAT',則需要指定第三個參數太。沒有這一點,它是不確定的價值被視爲模式;從結果看來,答案似乎是'1'。 –

+0

@JonathanLeffler感謝您提供更嚴格的原型,我更新了答案。 –

相關問題