diff --git a/.gitignore b/.gitignore index 9ced864..8966a11 100644 --- a/.gitignore +++ b/.gitignore @@ -234,3 +234,4 @@ CMakeCache.txt Makefile cmake_install.cmake bin +.cmake/api/v1/reply diff --git a/CMakeLists.txt b/CMakeLists.txt index c6d52f2..7e5d0de 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,3 +6,5 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) include_directories(${PROJECT_SOURCE_DIR}) add_executable( hello src/hello.c ) +add_executable( args src/args.c ) +add_executable( translate src/translate.c ) diff --git a/ex/progra/Aufgaben-V01.pdf b/ex/progra/Aufgaben-V01.pdf new file mode 100644 index 0000000..96bb751 Binary files /dev/null and b/ex/progra/Aufgaben-V01.pdf differ diff --git a/ex/progra/v01.md b/ex/progra/v01.md new file mode 100644 index 0000000..60081b4 --- /dev/null +++ b/ex/progra/v01.md @@ -0,0 +1,128 @@ +# 1 + +Geben Sie ein Kommando an, mit dem Sie ... + +1. Handbuchseiten („man pages“) öffnen können. + man +2. das aktuelle Verzeichnis in der Shell ausgeben können. + pwd +3. ein neues Verzeichnis erzeugen können. + mkdir +4. in ein Verzeichnis wechseln können. + cd, uvm +5. den Inhalt eines Verzeichnisses in der Shell ausgeben können. + ls +6. eine leere Datei erzeugen können. + touch +7. versuchen können den Inhalt einer Datei zu bestimmen. + file +8. den Inhalt verschiedener Dateien verknüpfen oder den Inhalt einer Datei ausgeben können. + ln, cat +9. Zeilen vom Ende einer Datei in der Shell ausgeben können. + tail +10. Zeilen vom Anfang einer Datei in der Shell ausgeben können. + head +11. Dateien oder Verzeichnisse an eine andere Stelle kopieren können. + cp +12. Dateien oder Verzeichnisse an eine andere Stelle verschieben können. + mv +13. Dateien oder Verzeichnisse löschen können. + rm +14. ein leeres Verzeichnis löschen können. + rmdir +15. eine Zeichenkette in der Shell ausgeben können. + echo, cat +16. die Dateirechte von Dateien oder Verzeichnissen ändern können. + chmod +17. Das Password eines Benutzers ändern können. + passwd +18. die laufende Sitzung (und damit auch die Shell) beenden und den Rückgabewert eines Shell- Skripts festzulegen können. + exit +19. das System neu starten können. + reboot +20. das System ausschalten können. + shutdown [now|90] +21. einen neuen Benutzer erstellen können. + useradd,adduser +22. einen Benutzer löschen können. + userdel +23. einen Benutzer ändern können. + usermod +24. die Gruppenzugehörigkeiten des Benutzers ausgeben können. + groups $USER +25. eine neue Gruppe erstellen können. + groupadd +26. eine Gruppe löschen können. + groupdel +27. eine Gruppe ändern können. + groupmod +28. den Benutzer (⇒ Besitzer) ändern können, der einer Datei oder einem Verzeichnis zugeordnet ist. + chown +29. die Gruppe ändern können, die einer Datei oder einem Verzeichnis zugeordnet ist. + chown +30. einen „Link“ erstellen können. + ln +31. eine Datei nach den Zeilen durchsuchen können, die ein Suchmuster enthalten? + grep, rg, awk +32. eine Liste der laufenden Prozesse in der Shell ausgeben können. + ps [axu] +33. einen im Hintergrund der Shell laufenden Prozess in den Vordergrund holen können. + fg +34. einen Prozess in den Hintergrund der Shell verschieben können. + bg +35. einen Prozess beenden können. + kill +36. eine Gruppe von Prozessen beenden können. + killall +37. die Priorität eines neuen Prozesses festlegen können. + nice +38. die Priorität eines existierenden Prozesses ändern können. + renice +39. eine Liste der existierenden Prozesse als Baumstruktur in der Shell ausgeben können. + pstree + +# 2 – Dateien und Verzeichnisse + +1. Erzeugen Sie in Ihrem Benutzerverzeichnis (Home-Verzeichnis) ein Verzeichnis BTS. + cd ; mkdir BTS +2. Wechseln Sie in das Verzeichnis BTS und erzeugen Sie darin eine leere Datei mit dem Dateinamen Datei1.txt (Verwenden Sie zum Anlegen der Datei keinen Editor, sondern einen Kommandozeilenbefehl). + cd BTS; touch Datei1.txt +3. Überprüfen Sie die Dateigröße der Datei Datei1.txt. + du -hs Datei1.txt +4. Ändern Sie die Modifikationszeit der Datei Datei1.txt auf Ihr Geburtsdatum. + touch -t 200302130740.00 Datei1.txt +5. Erzeugen Sie auf der Shell eine neue Datei Datei2.txt und fügen Sie in die neue Datei einen beliebigen mehrzeiligen Text als Inhalt ein (Verwenden Sie für das Einfügen des Textes keinen Editor, sondern einen Kommandozeilenbefehl). + cat /etc/passwd > Datei2.txt +6. Geben Sie die erste Zeile der Datei Datei2.txt aus. + head -n 1 Datei2.txt +7. Hängen den Inhalt von Datei2.txt an Datei1.txt an (Verwenden keinen Editor, sondern einen Kommandozeilenbefehl). + cat Datei2.txt >> Datei1.txt +8. Erzeugen Sie in Ihrem Home-Verzeichnis ein Verzeichnis mit dem Verzeichnisnamen BS_Vorlesung. + cd ; mkdir BS_Vorlesung +9. Kopieren Sie die Dateien Datei1.txt und Datei2.txt aus dem Verzeichnis BTS in das Verzeichnis BS_Vorlesung. + cp ~/BTS/Datei*.txt . +10. Löschen Sie das Verzeichnis BTS. + rm -r ~/BTS + +# 3 – Schreiben Sie ein C-Programm hello.c, das „Hello, World“ in die Standardausgabe ausgibt. + +See [../../src/hello.c] + +# 4 – Argumente + +Schreiben Sie ein C-Programm args.c, das die Argumente der Kommandozeile in der Standausgabe ausgibt. + +See [../../src/args.c] + +# 5 – Translate + +Schreiben Sie ein C-Programm translate.c, das Zeichenketten aus der +Standeingabe einliest und nach einer Übersetzung in der Standardausgabe +wieder ausgibt. Die Übersetzung wird durch zwei gleichlange Argumente der +Kommandozeile set1 und set2 definiert und geschieht wie folgt, für der jeden +Buchstaben der eingelesenen Zeichenketten wird in nachdem ersten Auftreten +des Buchstabens in dem Argumente set1 gesucht. Falls der Buchstabe nicht im +Argument set1 gefunden wird, bleibt der Buchstabe unverändert. Falls der +Buchstabe im Argument set1 an der i- ten Stelle zum ersten Mal auftritt, +wird der Buchstabe durch den Buchstabe an der i-ten Stelle des Arguments +set2 ersetzt. diff --git a/src/args.c b/src/args.c new file mode 100644 index 0000000..fd3a649 --- /dev/null +++ b/src/args.c @@ -0,0 +1,8 @@ +#include +int main(int argc, char *argv[]) +{ + for (int i=0;i +int main(int argc, char *argv[]) +{ + char* translator[2]; + if (argc != 3) { + printf("not enough arguments"); + return 1; + } + translator[0] = argv[1]; + translator[1] = argv[2]; + printf("translator0: %s\n", translator[0]); + printf("translator1: %s\n", translator[1]); + + // TODO: translate from stdin and print to stdout + + return 0; +}