Jak vytvořit sdílené paměti v c?

0

Otázka

Jak sdílet data mezi aplikací v c?

Jsem použít dočasný soubor jako trvalé úložiště. Klient vloží data, může server číst. Myšlenka je, aby bylo možné přidat co nejvíce klientů, jak budete chtít. To je čistě otázka výzkumu, které nejsou přímo vztahující se k problému skutečného světa.

Existují lepší způsoby, jak sdílet data mezi aplikacemi?

ipc.h (interprogram komunikace.h)

#ifndef IPC  /* Include guard */
#define IPC

void write_message(int ID);
void read_message();

#endif 

klient.c

#include <stdlib.h>
#include <stdio.h>
#include "ipc.h"

int main()
{
    int ID;
    while(1){   

        printf("Please enter ID: ");
        scanf("%d", &ID);
        
        write_message(ID);
    }
    return 0;
}

server.c

#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include "ipc.h"

int main()
{
    
    while(1){

        read_message();
        Sleep(100);
    
    }
    return 0;
}

ipc.c (obsahuje funkce, jako je popsáno v ipc.h)

#include <stdlib.h>
#include <stdio.h>
#include "ipc.h"

void write_message(int ID){

    FILE * fp;
    fp = fopen("temp.txt", "w");
    if(fp == NULL)
    {
        printf("Error!");   
        exit(1);             
    }
    fprintf(fp, "ID\t:\t%d\n", ID);
    fclose(fp);
}

void read_message(){

    FILE * fp;
    char c;
    fp = fopen("temp.txt", "r");
    if(fp == NULL)
    {  
        exit(1);             
    }
  
    while ((c = getc(fp)) != EOF){
        printf("%c", c);
    }

    fclose(fp);
}
c shared-memory windows
2021-11-23 19:23:02
1

Nejlepší odpověď

0

Klient-server je jeden způsob, jak to udělat. Jste neuvedl OS, ale pokud jste v systému Windows, můžete vytvořit sdílené paměti stránky, které lze přistupovat pomocí více procesů.

Použití funkce CreateFileMapping s PAGE_READWRITE přístup k vytvoření souboru objektu, který bude sdílený. Pak budete muset mapu, která se do paměti s MapViewOfFile , která vrátí vyrovnávací paměti sdílené procesy. Druhý proces sleduje stejné kroky, pomocí stejný název název uvedený v CreateFileMapping.

Oba procesy mohou nyní číst a zapisovat do této vyrovnávací paměti.

2021-11-23 19:30:24

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................