将数据发送到另一个进程

时间:2013-06-09 14:35:48

标签: c unix segmentation-fault message-queue

我必须在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个fork,并在每个fork中执行

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

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

(抱歉我的英文,这不是我的母语)

1 个答案:

答案 0 :(得分:0)

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