2016-10-11 1 views
1

Wie teile ich Daten (Struct) zwischen zwei unabhängigen (keine Fork) Prozesse. Was ich tun möchte, ist im Grunde so etwas wie dieses:Teilen Sie Daten zwischen zwei indexabhängigen Prozessen in C

process1: 

Server(PID-399341): Waiting for input.... 

dann in einem anderen Terminal

process2: 

Enter server process: 

399341 

Enter a string: 

Hello 

schließlich

process1: 

"Hello" has been entered. 

-System ist QNX/POSIX. Was sind meine Möglichkeiten, dies zu tun?

Danke!

+1

TCP/IP? Oder in eine Datei schreiben? –

+0

Shared-Memory-Segment? –

+0

FIFO? Nachrichtenwarteschlange? Benutzerdefiniertes Gerät? Wiki? Anderer HTTP-Dienst? SneakerNet? –

Antwort

1

Es kann leicht mit Named Pipe (FIFO) erreicht werden. Wählen Sie einfach den Namen des FIFO wie Ihre PID. Hier ist ein Arbeitscode für Server und Client.

server.c

int fd; 
    char buf[10], rdbuf[50]; 

    sprintf(buf,"%d",getpid()); 

    if(mkfifo(buf,0660) == -1) 
      perror("mkfifo"); 

    printf("Server(PID-%d): Waiting for input..\n",getpid()); 

    fd = open(buf,O_RDONLY); 

    read(fd, rdbuf, 50); 

    printf("%s has been entered\n",rdbuf); 

    close(fd); 

    return 0; 

client.c

int fd; 
    char wrbuf[50], buf[10]; 

    printf("Enter server process: "); 
    scanf("%s",buf); 
    getchar(); 

    fd = open(buf,O_WRONLY); 

    printf("Enter message\n"); 

    gets(wrbuf); 

    write(fd, wrbuf, strlen(wrbuf)+1); 

ich gleiche denken kann gleiche wie PID, indem der Schlüsselwert mit Message Queue und gemeinsamen mem Segment erfolgen. Aber ich bin mir nicht sicher.

+0

Hallo, danke. Immer schön, einfache Beispiele zu sehen. Wie weiß der Server also, dass der Puffer geändert wurde? Ich plane, dies in einer unendlichen While-Schleife zu verwenden, in der der Client die Servernachrichten weiter zuführt. – Senri

+0

Der Server liest in diesem Beispiel immer 50 Zeichen. Wenn dort ein Nullzeichen vorhanden ist, druckt printf nur so viel. Der Puffer wird also immer vom Server gelöscht und wartet dann auf eine andere Nachricht. Dies wird von Ihrem Betriebssystem erledigt. Um auf der sicheren Seite zu sein, lege alle Nullzeichen in den Puffer, bevor du darauf schreibst. –

Verwandte Themen