Posted on

Übung 1

Netzwerkkommunikation, Sockets, POSIX-I/O vs. C-I/O, Aufgabe 1

FolienAufgabe (snail)

Beispiel: SMTP

E-Mail versenden mit netcat(1):

cipterm0:~> nc faui03.cs.fau.de 25
220 faui03.informatik.uni-erlangen.de ESMTP Postfix
HELO cipterm0.cip.cs.fau.de
250 faui03.informatik.uni-erlangen.de
MAIL FROM:<wa94tiju@cipterm0.cip.cs.fau.de>
250 2.1.0 Ok
RCPT TO: <empfaenger@fau.de>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
FROM: Barack Obama <elon.musk@tesla.com>
TO: E. Mpfaenger <empfaenger@fau.de>
SUBJECT: Kaufen sie Aktien Jetzt!!!

Hallo bitte unbedingt 2000000000 überweisen!!!

...die Aktien sind sehr gut - ich schwöre!!1!
.
250 2.0.0 Ok: queued as 8427848030F
QUIT
221 2.0.0 Bye

Beispiel: convert

Programm, welches Eingabe zeichenweise nach Groß-/Kleinschreibung konvertiert ausgibt.

  • Eingaben werden von stdin eingelesen
  • Eingabeformat: ‘u’/‘l’
  • Ausgabe: alle Zeichen der Eingabe als Groß(‘u’)- bzw. Kleinbuchstaben(‘l’)
  • #include <stdio.h>  // FILE* stdin
    #include <stdlib.h>
    
    
    int main(int argc, char *argv[]) {
    	char mode = fgetc(stdin);
    	if (mode == EOF) {
    		if (ferror(stdin)) {
    			perror("fgetc");
    		} else {
    			fprintf(stderr, "Please provide parameter\n");
    		}
    		return EXIT_FAILURE;
    	} else if (mode != 'u' && mode != 'l') {
    		fprintf(stderr, "Wrong mode");
    		return EXIT_FAILURE;
    	}
    
    	int c;
    	while ((c = fgetc(stdin)) != EOF) {
    		if (mode == 'u' && c >= 'a' && c <= 'z') {
    			c -= ('a' - 'A');
    		} else if (mode == 'l' && c >= 'A' && c <= 'Z') {
    			c += ('a' - 'A');
    		}
    
    		fputc(c, stdout);
    		if (ferror(stdout)) {
    			perror("stdin");
    		}
    	}
    
    	if (ferror(stdin)) {
    		perror("stdin");
    	}
    
    	int status = fflush(stdout);
    	if (status == EOF) {
    		perror("fflush");
    		return EXIT_FAILURE;
    	}
    
    	return EXIT_SUCCESS;
    }