2017-01-26 7 views
0

私は標準的なI/Oを勉強して、1つの質問があります。閉じる(0)の後にstdinを開くことができますか?

#include <stdio.h> 
    int main(){ 
    void *mem = malloc(0x80); 
    close(0) 
    /* 
     something code (solution) 
    */ 
    read(0,mem,0x80); 
    } 

上記のコードでは、開けられますか? 私はopen( '/ dev/tty')と思っていました。 。 しかし、それは完全にstdinを開こうとしていないようです。 私は私の見解では

+0

'stdin_filenoは実際にはディスク上のファイルのFDであり、そのようなFDの最後です。ファイルを閉じると、ファイルが削除されることがあります。したがって、原則として、同じファイルを指し示すクローズドFDを復元する方法はありません。もちろんFD0を新しい*ファイルに再び開くことができます。 –

+0

@KerrekSBだから、プログラムの開始時にstdinを作成するには? –

+0

@オウジン: 'dup'や' dup2'を避ける理由は何ですか? –

答えて

1

)(DUPを使用しないことを願って、これを実現するための理想的な方法は、バックアップfdを作成する

  • 使用dup()だろう。
  • close()stdin
  • 操作
  • dup2()を使用して、以前のバックアップfdを通過stdinを復元行います。
+0

別の方法はありませんか?可能であれば、dup()を使わない方が良いでしょう。 –

関連する問題