2013-10-07 19 views
0

這是一個學校作業。爲shell輸出重定向創建文件

所以基本上我已經寫了一個處理終止與&命令的殼的C代碼,並且使用><.使用管道和fork()execvp()輸入/輸出重定向。

問題是我的輸入/輸出重定向僅處理已存在的文件

我需要知道的是我將如何去重定向輸出到一個不存在的文件 - 我知道我將不得不創建該文件,但我不知道如何工作。

例如:ls -a < test.txt

如果test.txt的是不在目錄中,我需要創建它,並將輸出重定向到。 那麼如何創建這個文件?

這裏是不創建一個新的文件中的一些基本的示例代碼:

 else if('>' == buff[i]){ 
      i++; 
      j=0; 

      if(' ' == buff[i]) 
       i++; 

      while(' ' != buff[i] && i < len) 
       out_file[j++]=buff[i++]; 
      out_file[j]='\0'; 


      if ((ofd = open(out_file,1)) < 0){ 
       perror("output redirected file"); 
       exit(1); 
      } 

      close(1); 
      dup(ofd); 
     } 

任何幫助與我怎麼能輸出,並創建一個新的文件,將不勝感激!謝謝!

+0

小技術說明比較:你的意思是'LS -a> test.txt'? – chepner

回答

1

你需要告訴open必要時創建文件,:

if ((ofd = open(out_file, O_WRONLY | O_CREAT)) < 0) { 

請注意,如果您使用的標誌命名的常量open您的代碼將更具可讀性。與相同功能

if ((ofd = open(out_file, 513)) < 0) { 

甚至

if ((ofd = open(out_file, 0x0201)) < 0) { 
+0

謝謝!沒有意識到這是一個小小的改動:) – meowkinsmeow