プログラムエラー
プログラムを実行したところ、こんなエラーが出てしまいました。
msgrcv failure: Argument list too long
実行したいプログラムは3つのプロセスがもつ数字を順番に並べる作業です。
1番目のプロセスはうまくいくのですが、2番目が上記のようなエラーがでてきてしまいます。
なぜでしょうか??
エラーで出てくるところは
int main( int argc, char** argv )
{
int qid;
Qmsg message;
long int myNo;
int myProp;
int data[NUM_DATA];
int isSwap = 0;
int needMinSort = 0;
int needMaxSort = 0;
int got_data;
int totalSwapNum = 0;
int i,flag,m,n,l,s;
if( argc != 2){
fprintf(stderr, "Usage: %s <own order(1-10)>\n", argv[0]);
exit(1);
}
myNo = atol(argv[1]);
if( myNo <= 0 || NUM_PROCESS < myNo ){
fprintf(stderr, "Illegal own order (%ld)\n", myNo);
exit(1);
}
switch( myNo ){
case 1: myProp = LEFT_SIDE;
printf("[%ld] is LEFT SIDE\n", myNo);
break;
case NUM_PROCESS:
myProp = RIGHT_SIDE;
printf("[%ld] is RIGHT SIDE\n", myNo);
break;
default:
myProp = MIDDLE;
printf("[%ld] is MIDDLE\n", myNo);
}
errno = 0;
if( (qid = msgget((key_t)KEY_NO, 0666 | IPC_CREAT)) == -1 ){
perror("msgget failure");
exit(1);
}
message.msgData.status = MSG_AWAKE;
switch( myProp ){
case LEFT_SIDE:
sendMsgRhs( qid, myNo, message );
break;
case MIDDLE:
recvMsgLhs( qid, myNo, &message ); //ここでエラー
if( message.msgData.status != MSG_AWAKE ){
exit(1);
}
sendMsgRhs( qid, myNo, message );
break;
case RIGHT_SIDE:
recvMsgLhs( qid, myNo, &message );
if( message.msgData.status != MSG_AWAKE ){
exit(1);
}
break;
}
}
int recvMsgLhs( int qid, long int myNo, Qmsg* message )
{
long int read_from = myNo;
errno = 0;
if(msgrcv(qid, message, sizeof(message->msgData), read_from, 0) == -1){
perror("msgrcv failure");
exit(1);
}
#ifdef SHOW_XFER_MESSAGE
printf("Lhs[%2ld] ---> Recv ---> [myNo:%2ld] (%s)",
message->type - 1, myNo,
msgStr[message->msgData.status]);
switch( message->msgData.status ){
case MSG_SWAP:
case MSG_NEED:
case MSG_SWAP_CNT:
printf(" {data:%d}\n", message->msgData.data);
break;
default:
printf("\n");
}
#endif
return errno;
}
お礼
解決しました。 ありがとうございました。