-1

UNIX で C プログラムを作成する必要があります。カー レースの結果テーブルをシミュレートする必要があります。(フォークを使用して) 車を作成するためのコードを既に作成しており、結果を別のプログラムに送信しようとしています。その他のプログラムは、受信したデータを並べ替えることができます。メッセージ キューまたは共有メモリを使用したい (その場合、どの方法が最適かはわかりません) が、プログラミングの経験があまりないため、その方法が本当にわかりません。

私を助けてくれる人はいますか?

前もって感謝します !

編集 :

メッセージ キューを実装しようとしましたが、セグメンテーション エラーが発生しました。それがどこから来たのかわかりません=/

各プログラムに2つの構造体があります:

T_Voiture :

typedef struct T_voiture    
    {
        int num;
        int stand; //nombre d'arrêts au stand
        bool out;
        int tours; //nombre de tours
        //temps en millisecondes
        int meilleurTemps;
        //meilleurs temps de chaque secteur
        int s1;
        int s2;
        int s3;
        //temps derniers secteurs
        int secteur1;
        int secteur2;
        int secteur3;
        float vitesse;
        double tempsCourse; //temps passé en course, que l'on incrémente à chaque secteur
    }T_voiture;

および my_msgbug :

struct my_msgbuf {
    long mtype;
    T_voiture mvoiture;
};

私の送信者プログラム(Voiture1.c)では、24回のフォークを行い、各フォークで行います

struct my_msgbuf buf;
T_voiture v;
v=initialiserVoiture(v,ii);
lancerQualifs(v, longueur, TEMPS_Q1);
msgsnd(msqid, &buf, sizeof(struct my_msgbuf) - sizeof(long), 0);

そして、私の受信プログラム (Gestionnaire.c) では、次のことを行います。

for(;;) { /* Spock never quits! */
        if (msgrcv(msqid, &buf, sizeof(buf.mvoiture), 0, 0) == -1) {
            perror("msgrcv");
            exit(1);
        }
        printf("Voiture : \"%s\"\n", buf.mvoiture.meilleurTemps);
    }

最初に Voiture 1.c を起動し、次に Gestionnaire.c を起動します。端末に「セグメンテーション違反」エラーが表示されるのは、2 番目のプログラムを開始するときです。しかし、キューへの接続はかなりうまくいっているようです

この質問が前回よりも具体的であることを願っています

(そして私の英語で申し訳ありません、それは私の母国語ではありません)

4

1 に答える 1

0

メッセージキューの方が簡単で、共有メモリはデータを移動するのに問題ありませんが、データが利用可能になったときに他のプロセスに通知する方法を提供する必要があります。

于 2013-06-09T17:19:24.810 に答える