0

gitで「スマートHTTP」転送を提供するlibfcgiベースのfastcgiアプリケーションを構築しています。そのためには、現在git-upload-packプログラムをフォークして実行する必要があります。唯一の問題は、libfcgiがSTDOUTとSTDERRを特別なFCGIファイル記述子に置き換え、gitがこれらを認識しないことです。親プロセスでgitプログラム(stdout&stderr)の出力をキャプチャして、サーバーに送信できるようにしたい。

4

1 に答える 1

1

fork()を呼び出した後、exec()を呼び出す前に、次の手順を実行します。fds 1および2(stdoutおよびstderr)でclose()を呼び出し、次にdup2()を呼び出して、libfcgiの新しいfdsのSTDOUTおよびSTDERRのfdsを割り当てます。 :1および2。次に、STDOUTおよびSTDERRの元のfdsを閉じることができます(これらは実行されたgitプログラムに対してのみ閉じられますが、メインでは引き続き開かれます)。

これにより、gitの出力がlibfcgiストリームに再割り当てされます。ストリームを手動で読み取り、自分でデータを送信する場合は、pipe()呼び出しを使用してfdsのペアを作成し、gitが一方に書き込むことができるようにし、もう一方から読み取ることができます。または、これを実行できるpopen()を使用します(ただし、stderrを使用することはできません)

于 2013-01-16T20:09:49.247 に答える