-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。当我启动第二个程序时,“分段错误”错误出现在我的终端中。但是与队列的连接似乎运行得很好

我希望这个问题比上一个更具体

(对不起我的英语,这不是我的母语)

4

1 回答 1

0

我会说消息队列更容易,共享内存可以移动数据,但是您仍然必须提供一种在数据可用时通知其他进程的方法。

于 2013-06-09T17:19:24.810 回答