Übung 3
Speicherlayout, UNIX-Prozesse
Folien ⨳ Aufgabe
Codebeispiel aus der Tafelübung
Ein Programm, dass den ersten Parameter einmal mit jedem weiteren Parameter als Argument ausführt:
list-run.c
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/wait.h>
void run(const char *program, const char *arg) {
pid_t pid = fork();
if (pid == -1) { perror("fork");
} else if (pid == 0) { execlp(program, program, arg, NULL);
perror("exec");
exit(EXIT_FAILURE);
} else { int status;
waitpid(pid, &status, 0);
if (WIFEXITED(pid)) {
printf("%s exited with %d\n", program, WEXITSTATUS(status));
}
}
}
#include <stdio.h>
int main(int argc, const char *argv[]) {
if (argc < 3) {
fprintf(stderr, "Not enough arguments\n");
}
const char *program = argv[1];
for (int i = 2; i < argc; i++) {
run(program, argv[i]);
}
}
Makefile
.PHONY: rm
CC = clang
CFLAGS = -std=c11 -pedantic -Wall -Werror -D_XOPEN_SOURCE=700
list-run: list-run.c
$(CC) $(CFLAGS) list-run.c -o list-run
rm:
rm -f list-run