Posted on

Übung 3

Speicherlayout, UNIX-Prozesse

FolienAufgabe

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) {  // Fehler
		perror("fork");
	} else if (pid == 0) {  // Kind
		execlp(program, program, arg, NULL);
		perror("exec");
		exit(EXIT_FAILURE);
	} else {  // Elternprozess
		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