66 lines
1.6 KiB
C
66 lines
1.6 KiB
C
/*
|
|
* Interprozesskommunikation über Named Pipes (FIFOs) - pipeclient.c
|
|
*
|
|
* Funktionsweise: Dieses Client-Programm meldet sich über ein benanntes Pipe
|
|
* bei einem geeigneten Server und fragt mit einer Losung (Passwortsatz) nach
|
|
* einem Geheimnis. Der Server kontrolliert die Losung. Ist diese korrekt,
|
|
* antwortet der Server mit dem Geheimnis über die gleiche Pipe, welches auf
|
|
* geeignete Weise vom Client gelesen werden kann.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <string.h>
|
|
#include <fcntl.h>
|
|
|
|
//char CODEWORD[] = "<Schluessel>";
|
|
char CODEWORD[] = "<Schluessel>";
|
|
char buffer[8];
|
|
|
|
int main() {
|
|
// Öffnen der Named Pipe nur zum Schreiben
|
|
printf("Client: Öffne Pipe nur zum Schreiben.\n");
|
|
int id_p = open("P1", O_WRONLY); // const char *path, int oflag … / returnt einen Filedeskriptor
|
|
|
|
if (id_p >= 0) {
|
|
printf(" OK.\n\n");
|
|
}
|
|
|
|
// Absenden des Codeworts an Server
|
|
printf("Client: Übergebe Codewort an den Server.\n");
|
|
int result_write = write(id_p, CODEWORD, strlen(CODEWORD));
|
|
|
|
if (result_write > 0) {
|
|
printf(" OK.\n\n");
|
|
}
|
|
|
|
close(id_p);
|
|
|
|
// Empfangen der Antwort
|
|
printf("Client: Empfange Geheimnis.\n\n");
|
|
|
|
// Öffnen der Pipe zum Lesen
|
|
printf("Client: Öffne Pipe nur zum Lesen.\n");
|
|
id_p = open("P1", O_RDONLY);
|
|
|
|
if (id_p >= 0) {
|
|
printf(" OK.\n");
|
|
}
|
|
|
|
// Lesen des Geheimnisses aus der Pipe
|
|
int result_read = read(id_p, buffer, sizeof(buffer));
|
|
|
|
if (result_read > 0) {
|
|
printf(" Geheimnis erhalten.\n\n");
|
|
}
|
|
|
|
// Ausgabe des Geheimnisses
|
|
printf("Client: Das Geheimnis lautet: '%s'.\n\n", buffer);
|
|
|
|
printf("Client: Ende.\n");
|
|
|
|
return 0;
|
|
}
|