2011-10-25 18 views
0

stdoutとstderrをファイルにリダイレクトして元の設定に復元しようとしています。私は正常に出力をファイルにリダイレクトしましたが、ttyから復元することはできません。これは私が持っているコードです:/dev/ttyでSTDOUTとSTDERRをリセットする

  fid = open("/dev/tty", O_WRONLY); 
      if (fid < 0) { 
       fprintf(stderr, "Opening TTY failed."); 
       exit(1); 
      } else { 
       close(1); 
       dup(fid); 

       close(fid); 
      } 

open call on ttyは常に失敗します。 (-1を返します)。根拠のない何かが私がやろうとしていることはありますか?

私もそれは多分それはアクセス許可の問題かもしれないので、私はそれらをチェックするのに:

CRW-RW-rw- 1つのルートホイール2、0 10月21日10:46の/ dev/ttyの

私はSnow Leopardでその価値があるものを開発しています。

ありがとうございました。

+0

ただ、追加の注記:私はperrorはを使用して、エラーをプリントアウトします。 「デバイスが設定されていません」と表示されます。 – user849170

答えて

0

dupコールで以前の設定を保存してから、復元するときはdup2を使用します。これは特にです。あなたが元に戻したいと思う「元の設定」は、端末デバイスではないかもしれません(それはあなたの賢明でない仮定です)。ユーザーはあなたの領域外で既にリダイレクトを使用しているかもしれません。

あなたは引数が間違っている可能性があり、特別な設定(例えばioctlなど)が必要な可能性を含めて、それらを一度再オープンすることについて心配する必要はありません。線に沿って

何か:

int saveFd = dup (1);  // check for errors. 

blahBlahBlah();    // close file desc 1, reopen, 
          // and weave your magic. 

int rc = dup2 (1, saveFd); // check for errors. 
関連する問題