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;
 | |
| }
 |