2016-09-23 18 views
2

私はパイプが全く新しく、何かを理解することができません。私は単一のパイプを作ることを知っています、それは単純ですCで名前のない複数のパイプを作成する

int fd[2]; 
pipe(fd); 

しかし、私はパイプの束を作成したいのですか?私は同じint配列、または別のものを使用しますか?私は3本のパイプを作成したい場合たとえば、それは、あなたは間違いなく異なるアレイを使用する必要が

int fd[2]; 
pipe(fd); 
pipe(fd); 
pipe(fd); 

それとも

int fd[2]; 
pipe(fd); 
int fe[2]; 
pipe(fe); 
int ff[2]; 
pipe(ff); 
+1

最初のオプションは4つのパイプをリークします.3番目の 'pipe()'呼び出しが成功した後にファイル記述子が何であったのか分かりません。使用可能なパイプは1つだけですが、3つのファイル記述子が十分にあります。 'pipe()'の呼び出しの間に 'close()'呼び出しを介在させない限り、 'pipe()'呼び出しごとに別々のファイルディスクリプタのペアが必要です。 –

答えて

2

だろう。 pipe(x)を呼び出した後、パイプの読み込み側と書き込み側のファイル記述子は、xの要素に入れられます。 pipe(x)を再度呼び出すと、以前に作成されたパイプのファイル記述子が失われ、後でそれを閉じることができなくなります。

0

あなたが複数のパイプを作成したいと彼らのために複数の名前を使用しない場合、あなたはこのような2次元配列使用することができます:あなたは、時間と複雑さを保存し、この方法

int fd[3][2]; 

for(i=0;i<3;i++) 
{ 
    pipe(fd[i]); 
} 

を複数の配列を宣言する

関連する問題