わかりました、まず背景から始めます。クライアントとサーバーを含むクラスのプロジェクトに取り組んでいます。これらは、リクエスト チャネルと呼ばれるものを介して相互に通信する 2 つの別個のプロセスです。
クライアントは、要求の数、要求チャネルのバッファーのサイズ、および要求を送信するワーカー スレッドの数 (それぞれ -n、-b、および -w) のコマンド ライン引数を収集します。
ユーザーが必要とするワーカー スレッドの数は、クライアントとサーバーの間に作成しなければならない要求チャネルの数です。
RequestChannel *channel;
int main(int argc, char * argv[])
{
char *n=NULL, *b=NULL, *w=NULL;
int num, buf, workers;
char optchar=0;
while((optchar=getopt(argc,argv,"n:b:w:"))!=-1)
switch(optchar)
{
case 'n':
n=optarg;
break;
case 'b':
b=optarg;
break;
case 'w':
w=optarg;
break;
case '?':
break;
default:
abort();
}
num=atoi(n);
buf=atoi(b);
workers=atoi(w);
channel=malloc(workers*sizeof(RequestChannel));
cout << "CLIENT STARTED:" << endl;
pid_t child_pid;
child_pid = fork();
if(child_pid==0)
{
execv("dataserver", argv);
}
else
{
cout << "Establishing control channel... " << flush;
RequestChannel chan("control", RequestChannel::CLIENT_SIDE);
cout << "done." << endl;
for(int i=0;i<workers;i++)
RequestChannel channel[i](chan.send_request("newthread"), RequestChannel::CLIENT_SIDE);
}
}
行でコンパイル エラーが発生しましたが、malloc
何が問題なのかわかりません。RequestChannel
のようにそれぞれにアクセスできるようにしたいだけですchannel[i]
。
今のやり方では、次のエラーが表示されます
void*
からへの無効な変換RequestChannel*
を に置き換えるsizeof(RequestChannel)
とsizeof(*RequestChannel)
、次のエラーが表示されます
')' トークンの前にプライマリ式が必要です。