私はプログラムを作成してリモートのデータを処理しています。 だから私は何かのように使用execlpはソケットを使用してデータを送信しません
catファイル| ./client -i "machineip" -p "port" -c "command
私のtarファイルの中でリストを取得したい場合は、コマンドを" base64 -d | tar -zvt "として使用できます。 私はこれらのオブジェクトを持っています。
ソック..は、Cソケットを実装するオブジェクトです。 = 2000 RCVBUFSIZEと私は私が私がパイプやフォークを使っていることを行うには子供や親プロセス
てるかどうかを知るために、データに PIDを送信し、取得するために使用サイズ。 基本的な構造は次のとおりです。
int fd[2];
pipe(fd);
if((pid=fork()) == -1) exit(-1);
if(pid == 0)
{
while((recvMsgSize = sock->recv(echoBuffer, RCVBUFSIZE)){
write(fd[1], echoBuffer, recvMsgSize);
}
}
else pipeback(fd,sock)
だから私は、データを取得し、親から子へ送信することができます。 クライアントは、標準入力から読み込み、ソケットを介して送信し、サーバは問題がpipeBack
void pipeback(int *fdRef, TCPSocket *sock){
char *buffer = new char[2000];
int size;
close(fdRef[1]);
dup2(fdRef[0], 0);
close(fdrEf[0]);
pipe(fout)
if((pid = fork()) == -1)exit(-1);
if(pid ==0){
close(fout[0]);
dup2(fout[1], 1);
close(fout[1]);
execlp("bash", "bash", "-c", "base64", NULL);
}
else{
close(fout[1]);
while((size = read(fout[0], buffer, 2000)) > 0){
sock->send(buffer, size);
write(fileno(stdout), buffer, size);
}
}
}
問題である
がラインであるソケットを介して読み込む「のexeclp(」bashの「」bashの"、" -c "、" base64 "、NULL);"私が4番目の引数に猫を使用する場合、それは動作します。もし私が1つ使用すれば - lahtrは私にフォルダ上のファイルを表示するので、魅力的です。 しかし、私がbase64またはuuencodeを使用すると...おそらく他のコマンドは、読み込み行で停止し、停止し、die、straceとgdbを使って何が起こっているのかを確認します。 このプロセスをデバッグするために必要なことはわかりません。 私は別のプログラムを作成しました。これはstdinから読み込み、パイプを使ってbashを使ってbase64またはuuencodeで処理します。 それは動作します、私はそれはソケットや時間と何かですが、私は考えを持っていません。 申し訳ありませんが、私の英語はそのようなものではありません... XD。すべて
NOTEため ありがとう:
私はstraceのを使用して、私はpidが停止し、それは(既に停止)PIDから読み取ろうとBASE64を使用するとき、私は気づきました。
誰かが私がそれをどのように解決できるか知っていますか?