#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char *argv[]) {
if (argc == 2) {
// TODO: Aufgabe a)
// Wenn genau ein Argument übergeben wurde, gib den ersten Buchstaben aus.
fflush(stdout
); // Wichtiger Flush, damit Ausgabe direkt erfolgt return 0;
}
if (argc > 2) {
// TODO: Aufgabe b) und c)
// Gib den ersten Buchstaben von argv[1] aus.
pid_t pid = fork();
if (pid == 0) {
// Kindprozess: Bereite neue Argumentliste vor (argv[1] wird entfernt)
char *new_args[argc]; // Platz für argv[0] + restliche Argumente + NULL
new_args[0] = argv[0]; // Programmname bleibt gleich
for (int i = 2; i < argc; i++) {
new_args[i - 1] = argv[i]; // Argumente um eins nach vorn verschieben
}
new_args[argc - 1] = NULL; // Null-Terminierung für execvp
// Neue Programm-Instanz mit gekürzter Argumentliste aufrufen
execvp(new_args[0], new_args);
// Nur bei Fehler erreicht
}
if (pid > 0) {
// Elternprozess wartet und gibt dann denselben Buchstaben erneut aus
wait(NULL);
}
if (pid < 0) {
}
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3lzL3dhaXQuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8Y3R5cGUuaD4KCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKICAgIGlmIChhcmdjID09IDIpIHsKICAgICAgICAvLyBUT0RPOiBBdWZnYWJlIGEpCiAgICAgICAgLy8gV2VubiBnZW5hdSBlaW4gQXJndW1lbnQgw7xiZXJnZWJlbiB3dXJkZSwgZ2liIGRlbiBlcnN0ZW4gQnVjaHN0YWJlbiBhdXMuCiAgICAgICAgcHJpbnRmKCIlY1xuIiwgYXJndlsxXVswXSk7CiAgICAgICAgZmZsdXNoKHN0ZG91dCk7ICAvLyBXaWNodGlnZXIgRmx1c2gsIGRhbWl0IEF1c2dhYmUgZGlyZWt0IGVyZm9sZ3QKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBpZiAoYXJnYyA+IDIpIHsKICAgICAgICAvLyBUT0RPOiBBdWZnYWJlIGIpIHVuZCBjKQogICAgICAgIC8vIEdpYiBkZW4gZXJzdGVuIEJ1Y2hzdGFiZW4gdm9uIGFyZ3ZbMV0gYXVzLgogICAgICAgIHByaW50ZigiJWNcbiIsIGFyZ3ZbMV1bMF0pOwogICAgICAgIGZmbHVzaChzdGRvdXQpOwoKICAgICAgICBwaWRfdCBwaWQgPSBmb3JrKCk7CgogICAgICAgIGlmIChwaWQgPT0gMCkgewogICAgICAgICAgICAvLyBLaW5kcHJvemVzczogQmVyZWl0ZSBuZXVlIEFyZ3VtZW50bGlzdGUgdm9yIChhcmd2WzFdIHdpcmQgZW50ZmVybnQpCiAgICAgICAgICAgIGNoYXIgKm5ld19hcmdzW2FyZ2NdOyAgLy8gUGxhdHogZsO8ciBhcmd2WzBdICsgcmVzdGxpY2hlIEFyZ3VtZW50ZSArIE5VTEwKCiAgICAgICAgICAgIG5ld19hcmdzWzBdID0gYXJndlswXTsgIC8vIFByb2dyYW1tbmFtZSBibGVpYnQgZ2xlaWNoCgogICAgICAgICAgICBmb3IgKGludCBpID0gMjsgaSA8IGFyZ2M7IGkrKykgewogICAgICAgICAgICAgICAgbmV3X2FyZ3NbaSAtIDFdID0gYXJndltpXTsgIC8vIEFyZ3VtZW50ZSB1bSBlaW5zIG5hY2ggdm9ybiB2ZXJzY2hpZWJlbgogICAgICAgICAgICB9CgogICAgICAgICAgICBuZXdfYXJnc1thcmdjIC0gMV0gPSBOVUxMOyAgLy8gTnVsbC1UZXJtaW5pZXJ1bmcgZsO8ciBleGVjdnAKCiAgICAgICAgICAgIC8vIE5ldWUgUHJvZ3JhbW0tSW5zdGFueiBtaXQgZ2Vrw7xyenRlciBBcmd1bWVudGxpc3RlIGF1ZnJ1ZmVuCiAgICAgICAgICAgIGV4ZWN2cChuZXdfYXJnc1swXSwgbmV3X2FyZ3MpOwoKICAgICAgICAgICAgLy8gTnVyIGJlaSBGZWhsZXIgZXJyZWljaHQKICAgICAgICAgICAgcGVycm9yKCJleGVjdnAiKTsKICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICB9CgogICAgICAgIGlmIChwaWQgPiAwKSB7CiAgICAgICAgICAgIC8vIEVsdGVybnByb3plc3Mgd2FydGV0IHVuZCBnaWJ0IGRhbm4gZGVuc2VsYmVuIEJ1Y2hzdGFiZW4gZXJuZXV0IGF1cwogICAgICAgICAgICB3YWl0KE5VTEwpOwogICAgICAgICAgICBwcmludGYoIiVjXG4iLCBhcmd2WzFdWzBdKTsKICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CiAgICAgICAgfQoKICAgICAgICBpZiAocGlkIDwgMCkgewogICAgICAgICAgICBwZXJyb3IoImZvcmsiKTsKICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K