TU Wien:Betriebssysteme UE (Puschner)/Test 2 2017W

Aus VoWi
Zur Navigation springen Zur Suche springen

MC (15 min)[Bearbeiten | Quelltext bearbeiten]

Es kamen Dinge wie z.B.

1. Was trifft auf ein Makefile zu?

  • Ist ein Shellscript
  • Ein Makefile enthält dependencies
  • Links vom ":" steht ??? und rechts davon steht ???

2.) Was trifft auf structs zu die als pointer verwendet werden

  • -> zum dereferenzieren
  • a->b ist das gleiche wie (*a).b

3.) Welche Anweisungen sind gültig?

  • ein paar komische zuweisungen wie z.b. int a*,b; a=&b; usw

4.) Was passiert beim Befehl listen()

  • ein client akzeptiert Verbindungen
  • ein server akzeptiert Verbindungen
  • ??

5.) Welche der gennanten Befehle können ein Programm unterbrechen

  • Signale
  • accept
  • globale variable

6.) was trifft auf lokale variablen zu?

  • gelten nur im jweiligen anweisungs block oder so ähnlich
  • ??

7.) MC Frage zu Deklaration und definition

8.) Was macht fork?

9.) Was macht listen()?

10.) Sie wollen mit einem via exec aufgerufenen Prozess über dessen stdout und stdin kommunizieren, was machen sie? (2 pipes erstellen)

11.) Definition von Makefiles

12.) Woraus sind Makefiles grundsätzlich aufgebaut? (targets:dependencies)

13.) Wie kann ein Elternprozess über das Terminieren seiner Kinder informiert werden?

14.) Ein int hat immer 32bit?

15.) was ist eine Deklaration?

16.) was ist korrekt?:

int a,b=32; a=b; 
int*a ,b; a=b; 
int *a,b; a=&b; 
int *a,*b; a=b;

17.) Gefahren bei Kernel Modulen (bufferoverflows, information leakage, ..)

18.) Was macht der Präprozessor? (konstanten definieren etc.)

19.) was ist konstant bei "const" (bsp ähnlich zu den Folien)

20.) Operatoren zu Operationen zuordnen (&& - bitweises und , << left shift , ! einerkomplement, ^ exklusives Oder)

21.) welche Devices gibt es: character devices, block devices, network devices, mouse devices

[...] weitere fragen hier ergänzen

Zu allem gibts eine frage, +1 für richtiges kreuz, -1 für falsche, 0 für keines. Pro frage 0-3 punkte.

Praktischer Teil (75 min)[Bearbeiten | Quelltext bearbeiten]

Task 1 fork, exec, pipe Task 1.1 stringmanipulation. array/pointer/char to num to char fehler macht

        : iban als string
        1) erste vier stellen ans ende
        2) wandle alle buchstaben in ziffernstrings um (A = 10, B=11 usw)
        3) füge " % 11 " hinzu
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

int main() {
    char *iban = "GB82WEST12345698765432";
    char *moved = malloc(strlen(iban) + 1); // +1 for \0
    memset(moved, 0, strlen(iban) + 1);

    strcpy(moved, iban + 4);
    strncat(moved, iban, 4);

    size_t letter_count = 0;
    for (size_t i = 0; i < strlen(moved); i++) {
        if (moved[i] >= 'A' && moved[i] <= 'Z') {
            letter_count++;
        }
    }

    size_t number_count = strlen(moved) - letter_count;

    char *converted = malloc(letter_count * 2 + number_count + 1);
    memset(converted, 0, strlen(moved) + 1);
    
    for (size_t i = 0; i < strlen(moved); i++) {
        if (moved[i] >= 'A' && moved[i] <= 'Z') {
            int code = moved[i] - 'A' + 10;
            char* code_str = malloc(3);

            sprintf(code_str, "%d\0", code);
            strncat(converted, code_str, 2);
        } else {
            strncat(converted, moved + i, 1);
        }
    }

    char *appended = malloc(strlen(converted) + 6);
    memset(appended, 0, strlen(converted) + 6);
    strcpy(appended, converted);
    strcat(appended, " % 97");

    printf("%s\n", appended);
    // In: GB82WEST12345698765432 	
    // Out: 3214282912345698765432161182 % 97
}

Task 1.2 fork + aus pipe lesen (PIPEFD SIND DIE PIPE FDs)

Task 1.3 pipe umleiten auf stdout und exec*

Task 2 Synchronisation

Task 2.1 shm erstellen, sems erstellen. Achtung: hier werden auch für error handling punkte vergeben!!!

Task 2.2 synchronisation für den server festlegen. Auch hier error handling; tipp : (errno==EINTR) Im Endeffekt ist hier nur ein sem_post(...) und ein sem_wait(...) zu schreiben.

Task 2.3 arbeiten mit shm

Zugriff auf shm, bank accounts (liste von structs).