2

あいさつ、古いSolaris2.4コードをCentOS5.3に移植しているときに、次のような呼び出しに遭遇しました。

/usr/bin/xterm -S%s%d ...

ここで、%sは00、01のような2文字の数字シーケンスXXであり、%dは数値ファイル記述子です。これは明らかにxtermに/dev/ ttypXX(疑似端末スレーブ)を使用するように指示する方法でしたが、コードは対応するマスターを開き、代わりにpipe(2)を呼び出し、書き込みfdを%d置換として渡すことを気にしないようです。その上。Solarisでは、スポナーからこのwrite fdに書き込むと、出力がxtermの子に表示されます。ちなみに、strace(1)では、/devの下で何かを開こうとする試みは見られませんでした。

4

1 に答える 1

1

ソラリスのマンページによると、パイプシステムコールは2つの双方向パイプを作成します。したがって、solarisでは、読み取りと書き込みに両方のfdsを使用できます。

fildes[0]およびfildes1に関連付けられたファイルストリームであり、両方とも読み取りと書き込みのために開かれます。

ただし、Linuxのpipe(2)のマンページによると:

pipe()は、プロセス間通信に使用できる単方向データチャネルであるパイプを作成します。

pipe(7)からの次の点にも注意してください。

一部のシステム(Linuxは除く)では、パイプは双方向です。データはパイプの端の間で双方向に送信できます。POSIX.1-2001によると、パイプは単方向である必要があります。ポータブルアプリケーションは、双方向パイプセマンティクスへの依存を回避する必要があります。


したがって、Linuxでは、双方向通信にfdを想定しているため、書き込み終了であるpipefd1をxtermに渡すことはできません。これを機能させるには、openpty()を使用して、スレーブfdをxtermに渡す必要があります。

AFAIK、openptyはSolarisでは使用できません。それがあなたのコードがそれを使わない理由のようです。

于 2009-07-22T21:08:56.323 に答える