これは大きなプログラムのほんの一部ですが、execvpから出力を取得しようとしていますが、execvpを正しく設定しdup2
て、パイプに転送しています。私の問題は、パイプの全長を読み取るために読み取りを使用する場合にexecvp
発生します。毎回の出力の大きさはわかりません。入力によって異なる可能性があるためです。
int fd[2];
pipe(fd);
pid_t pid = fork();
if (pid == 0) {
close(fd[0]);
dup2(fd[1], 1);
execvp(msg.v,(char *[]){msg.v,NULL});
} else if (pid > 0) {
close(fd[1]);
read(fd[0],msg.v,....);
}
読み取り用にいくつかの異なるサイズを試しましたが、それだけでは不十分であるか、最後にランダムなジャンクが発生します。stdioからpopenやその他のいくつかのものを使用できることはわかっていますが、割り当てにはそれらを使用しない必要があります。出力を取得するための他の方法のブランキング。
プログラム全体がサーバーの一部である、もう少し役に立たない情報。サーバーとクライアントを作成しています。サーバーを起動して、INETストリームを介してサーバーに送信するターミナルコマンドをクライアントに提供し、出力をクライアントに返送して、すべてstdioなしで出力を表示します。