Как совместить / убить вилку () - PullRequest
0 голосов
/ 17 декабря 2011
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<sys/types.h>

struct mbuffer{
    long mtype;
    int  mtext;
}stResult;

int main(){
    int iPID;
    stResult.mtext=0;
    stResult.mtype=6;
    iPID=fork();
    if(iPID<0){
        printf("Error....!\n");
        exit(1);
    }
    //... declarations for msgget()
    int msgflg,msgid,msgsize;
    msgflg = IPC_CREAT|0777;
    msgsize=0;
    key_t key;
    key=70;
    //... msgget();
    msgid=msgget(key,msgflg);
    if(iPID>0){
        stResult.mtext += 10;
        //msgsnd();
        msgsnd(msgid,&stResult,sizeof(stResult),msgflg);
    }
    else if(iPID==0){
        //msgrcv();
        while(1){
    msgsize=msgrcv(msgid,&stResult,sizeof(stResult),stResult.mtype,msgflg);
            if(msgsize>0){
                stResult.mtext += 20;
                break;
            }           
        }
    }
    //I want to combine/kill these processes here
    //and show this: "Result:30"
    wait();
    printf("Result:%d\n",stResult.mtext);
    //Here I see two results like:"Result=10","Result=30"
    return 0;
}

Я использую fork() для двух процессов и msgget(); для их связи. Я хочу иметь целое число. Увеличьте его в одном из процессов, затем увеличьте во втором и покажите общий результат. В итоге я итоговый результат + первый результат после первого увеличения. Я использовал join() или что-то подобное в школьные годы, но я просто не помню этого.

Ответы [ 3 ]

2 голосов
/ 17 декабря 2011

Чтобы убить процесс, неудивительно, что нужно использовать kill() (если вы действительно хотите его убить).И тогда да, используйте wait или waitpid.И помните exit() после / вместо выхода из цикла.

1 голос
/ 17 декабря 2011

Теперь оба процесса показывают результат.

Основной процесс будет ждать, пока не получит сообщение, поэтому просто exit после msgsnd.

0 голосов
/ 17 декабря 2011

Я подозреваю, что вы не хотите использовать fork () и вместо этого вы хотите использовать pthread_create () - в этом случае вы бы использовали pthread_join ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...