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 番目のプログラムを開始するときです。しかし、キューへの接続はかなりうまくいっているようです
この質問が前回よりも具体的であることを願っています
(そして私の英語で申し訳ありません、それは私の母国語ではありません)