無効な引数と識別子がメッセージキューのエラーを削除しました

妖精

メッセージキューは初めてです。基本的に私がここでやろうとしているのは、フォークしてユーザープロセスを作成することです。fork()の後、ユーザープロセスにメッセージを送信し、ユーザーメッセージからメッセージが返されるのを待ちます。実際のプログラムでは、while(1)を使用して、100個のユーザープロセスでこのようにループしています。一度に1つの特定のユーザープロセスからのみメッセージを送信および受信するようにするために、メッセージ受信の4番目の引数としてユーザープロセスPIDを使用し、メッセージを送信するときにメッセージタイプを= getpid()にします。無効な引数エラーが発生します。パーミッションビットを0666に変更しようとしましたが、これを行うと、プログラムは無限ループになります。パーミッションが0777の場合、次の結果が得られます。これが私がしたことの最小限の作業コードです。ヘッダーの長いリストを許してください。

oss.c

# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>
# include <sys/types.h>
# include <sys/ipc.h>
# include <sys/msg.h>
# include <sys/wait.h>

//global variables
int shmid;
int msgid;
key_t shmkey;

int currentprocessPID;
int key= 11223344;
void startprocess();

struct mesg_buffer {
    long mesg_type;
    int mesg_text[4];
} message;
/*mesg.text[0]-Stores PID
mesg.text[1]-stores CPU time used by process seconds
mesg.text[2]= stores CPU time used by process nanoseconds
*/

int main(int argc, char **argv)
{
    if((msgid = msgget(key, 0777 | IPC_CREAT))==-1)
        perror("error in msg get");
    printf("going to fork");
                    pid_t pID = fork();
                    if (pID < 0)
                    {
                        perror("Failed to fork:");
                        exit(EXIT_FAILURE);
                    }

                    else if (pID == 0)
                    {
                        static char *args[]={"./user",NULL};
                        int status;
                        if(( status= (execv(args[0], args)))==-1)
                        {
                            perror("oss:failed to execv");
                            exit(EXIT_FAILURE);
                        }
                        else
                            printf("\n message sent to user sucessfully");
                    }

                    currentprocessPID=pID;

                    message.mesg_type = currentprocessPID;
                    if( msgsnd(msgid, &message, sizeof(message), 0)==-1)
                        perror("error in sending message to user process");
                    else
                    {
                        printf("\nmessage sent to process %d",currentprocessPID);

                    }


                if(msgrcv(msgid, &message, sizeof(message), currentprocessPID, 0)==-1)
                    perror("error in recieving message from user process");
                else
                {
                    int corpse,status;
                        while ((corpse = waitpid(message.mesg_text[0], &status, 0)) != message.mesg_text[0] && corpse != -1)
                        {
                            char pmsg[64];
                            snprintf(pmsg, sizeof(pmsg), "logParse: PID %d exited with status 0x%.4X", corpse, status);
                            perror(pmsg);
                        }

                    printf("\n%d process is done with its work",message.mesg_text[0]);
                }

    return 0;
    exit(0);
}

user.c

//copy same headers as above

int shmid;
int key= 11223344;
struct mesg_buffer {
    long mesg_type;
    int mesg_text[4];
} message;
void main()
{
        int pid=getpid();
        printf("\n\nhello from %d",getpid());
        int times=0,timen=0,zero=0,randomnum,timelimit,n=0,sum,i,locals=0,localn=0;

        int msgid = msgget(key, 0666 | IPC_CREAT);
        if(msgid==-1)
            {
            perror("User:error in message get");
            exit(0);
            }
                if(msgrcv(msgid, &message, sizeof(message), pid, 0)==-1)
                {
                    perror("User: Error in receieving message from OSS");
                    exit(0);
                }
                else
                {
                    printf("\nIn User: Data received ");

                        message.mesg_type = pid;
                        message.mesg_text[0]=pid;
                        message.mesg_text[1] = locals;
                        message.mesg_text[2]=localn;
                        message.mesg_text[3]=1;

                        if( msgsnd(msgid, &message, sizeof(message), 0)==-1)
                            perror("error in sending message back to OSS");
                        exit(0);

                }
    exit(0);

}

これは私が得る出力です:

error in msg get: Permission denied
error in sending message to user process: Invalid argument
error in recieving message from user process: Invalid argument
going to fork

500行のような実際のプログラムでは、許可ビット0666を使用しました。そのプログラムでは、ユーザープロセスがossからメッセージを受信しようとすると、識別子が削除されたというエラーが発生します。

妖精

そのため、1日以上苦しんだ後(回答を調べた後)、私の教授は、メッセージキューが設定される前に、ユーザープロセスにメッセージを送信していると指摘しました。私がしなければならなかったのはsleep(1)を追加することだけでした。ossからメッセージが送信された後。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

「指定されたロックが無効です」というメッセージが表示されるのはなぜですか。LockTockenを使用してキューメッセージを削除しようとするとエラーが発生します

分類Dev

ORA-00904 'パラメータ化されたクエリで' MERGE INTO 'を使用すると、'無効な識別子 'エラーが発生します

分類Dev

POSIXメッセージキュー-オープン時のエラー:無効な引数

分類Dev

argparseのコマンドライン引数としてのファイル-引数が無効な場合のエラーメッセージ

分類Dev

argparseのコマンドライン引数としてのファイル-引数が無効な場合のエラーメッセージ

分類Dev

PHP エラーが発生しました 重大度: 警告メッセージ: foreach() に無効な引数が指定されました

分類Dev

メッセージ:構文エラー、予期しない '('、識別子(T_STRING)または変数(T_VARIABLE)が必要ですまたは '{'または '$'

分類Dev

光沢のあるリアクティブ式で環境ハッシュにアクセス中にエラーが発生しました。エラーメッセージ:getのエラー:最初の引数が無効です

分類Dev

光沢のあるリアクティブ式で環境ハッシュにアクセス中にエラーが発生しました。エラーメッセージ:getのエラー:最初の引数が無効です

分類Dev

aspxページのエラーメッセージ「文字列が有効なブール値として認識されませんでした」

分類Dev

エラー:モジュール引数の値が無効です指定された値は子モジュール変数に適していません

分類Dev

エラーメッセージ「TypeError:__ init __()が予期しないキーワード引数 'encoding'を取得しました」をプロットして表示-Python

分類Dev

「テーブルまたはビューが存在しません」および「with」句を含む「無効な識別子」エラー

分類Dev

computeRsaSha256Signature()が無効な引数を返します:キーが公開キーまたはrsa秘密キーの場合のキーエラー

分類Dev

「ハイパーレジャーコンポーザーの「エラー:識別子が無効または欠落している」を修正する方法」

分類Dev

JMSメッセージ・リスナーの呼び出しは、失敗した原因:識別子は、識別子、文字、無効なJMSが含まれています「 - 」:「X-要求-ID」

分類Dev

指定していないのに「統合セキュリティは無効な属性エラーです」というメッセージが表示される

分類Dev

Rabbitmqでメッセージを受信した後にエラーが発生した場合、メッセージがキューで削除されない理由

分類Dev

GHCで「モジュールが識別子をエクスポートしない」警告を無効にする

分類Dev

「無効化または削除されたタイプのオブジェクトにアクセスしています」というエラーメッセージでアプリがクラッシュしますか?

分類Dev

PHPのSOAPエラー:OperationFormatterで無効なメッセージ本文が検出されました

分類Dev

無効にされたAzure関数は、引き続きAzureストレージキューからメッセージをプルします

分類Dev

ORA-00904無効な識別子エラーが発生しましたが、識別子は作成されました

分類Dev

定義された数のメッセージをメッセージキューから削除します

分類Dev

[function.implode]:無効な引数がエラーを渡しました

分類Dev

msgsndからの無効な引数を引き起こす2つのフォークされたプロセス間のメッセージキュー

分類Dev

PHP-foreach()警告メッセージに無効な引数が指定されました

分類Dev

PHPMailerエラー:メッセージを送信できませんでした。Mailerエラー:無効なアドレス:(addAnAddress to):あなたのEメール

分類Dev

SQLOracleの「無効な識別子」および「テーブルが存在しません」エラー

Related 関連記事

  1. 1

    「指定されたロックが無効です」というメッセージが表示されるのはなぜですか。LockTockenを使用してキューメッセージを削除しようとするとエラーが発生します

  2. 2

    ORA-00904 'パラメータ化されたクエリで' MERGE INTO 'を使用すると、'無効な識別子 'エラーが発生します

  3. 3

    POSIXメッセージキュー-オープン時のエラー:無効な引数

  4. 4

    argparseのコマンドライン引数としてのファイル-引数が無効な場合のエラーメッセージ

  5. 5

    argparseのコマンドライン引数としてのファイル-引数が無効な場合のエラーメッセージ

  6. 6

    PHP エラーが発生しました 重大度: 警告メッセージ: foreach() に無効な引数が指定されました

  7. 7

    メッセージ:構文エラー、予期しない '('、識別子(T_STRING)または変数(T_VARIABLE)が必要ですまたは '{'または '$'

  8. 8

    光沢のあるリアクティブ式で環境ハッシュにアクセス中にエラーが発生しました。エラーメッセージ:getのエラー:最初の引数が無効です

  9. 9

    光沢のあるリアクティブ式で環境ハッシュにアクセス中にエラーが発生しました。エラーメッセージ:getのエラー:最初の引数が無効です

  10. 10

    aspxページのエラーメッセージ「文字列が有効なブール値として認識されませんでした」

  11. 11

    エラー:モジュール引数の値が無効です指定された値は子モジュール変数に適していません

  12. 12

    エラーメッセージ「TypeError:__ init __()が予期しないキーワード引数 'encoding'を取得しました」をプロットして表示-Python

  13. 13

    「テーブルまたはビューが存在しません」および「with」句を含む「無効な識別子」エラー

  14. 14

    computeRsaSha256Signature()が無効な引数を返します:キーが公開キーまたはrsa秘密キーの場合のキーエラー

  15. 15

    「ハイパーレジャーコンポーザーの「エラー:識別子が無効または欠落している」を修正する方法」

  16. 16

    JMSメッセージ・リスナーの呼び出しは、失敗した原因:識別子は、識別子、文字、無効なJMSが含まれています「 - 」:「X-要求-ID」

  17. 17

    指定していないのに「統合セキュリティは無効な属性エラーです」というメッセージが表示される

  18. 18

    Rabbitmqでメッセージを受信した後にエラーが発生した場合、メッセージがキューで削除されない理由

  19. 19

    GHCで「モジュールが識別子をエクスポートしない」警告を無効にする

  20. 20

    「無効化または削除されたタイプのオブジェクトにアクセスしています」というエラーメッセージでアプリがクラッシュしますか?

  21. 21

    PHPのSOAPエラー:OperationFormatterで無効なメッセージ本文が検出されました

  22. 22

    無効にされたAzure関数は、引き続きAzureストレージキューからメッセージをプルします

  23. 23

    ORA-00904無効な識別子エラーが発生しましたが、識別子は作成されました

  24. 24

    定義された数のメッセージをメッセージキューから削除します

  25. 25

    [function.implode]:無効な引数がエラーを渡しました

  26. 26

    msgsndからの無効な引数を引き起こす2つのフォークされたプロセス間のメッセージキュー

  27. 27

    PHP-foreach()警告メッセージに無効な引数が指定されました

  28. 28

    PHPMailerエラー:メッセージを送信できませんでした。Mailerエラー:無効なアドレス:(addAnAddress to):あなたのEメール

  29. 29

    SQLOracleの「無効な識別子」および「テーブルが存在しません」エラー

ホットタグ

アーカイブ