From 77034b6c5e3536d9afedf2708b185675d80ff559 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Mon, 13 Jul 2015 15:01:58 +0200 Subject: [PATCH] erste Version --- Makefile | 15 ++++++ batch.sh | 17 +++++++ discspan.c | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 164 insertions(+) create mode 100644 Makefile create mode 100755 batch.sh create mode 100644 discspan.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..34b5958 --- /dev/null +++ b/Makefile @@ -0,0 +1,15 @@ +CC=/usr/bin/gcc +CFLAGS=-Wall + +BINPATH=/usr/bin + +all: discspan +discspan: discspan.c + $(CC) $(CFLAGS) -o discspan discspan.c +install: + chmod 755 discspan + cp discspan $(BINPATH)/discspan +uninstall: + rm $(BINPATH)/discspan +clean: + rm discspan diff --git a/batch.sh b/batch.sh new file mode 100755 index 0000000..d2a1662 --- /dev/null +++ b/batch.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +cp testfile work +touch rest + +i=0 +while [ -f rest ] +do + rm rest + i=$((i + 1)) + ./discspan work medium$i rest -9 + if [ -f rest ] + then + cp rest work + fi +done +rm work diff --git a/discspan.c b/discspan.c new file mode 100644 index 0000000..bcb5e81 --- /dev/null +++ b/discspan.c @@ -0,0 +1,132 @@ +#include +#include +#include +#include +#include + +int exists(const char *fname) +{ + struct stat buffer; + if (stat(fname, &buffer) == 0) + return 0; + else + return 1; +} + +void splitter(const char *input, const char *output, const char *rest, unsigned long long splitgroesse) +{ + struct stat st; + char pfad[255]; + unsigned long long filesize; + unsigned long long humanread; + char einheit = 'B'; + char i = 0; + + FILE *in; FILE *out; FILE *re; + + in = fopen(input, "r"); + out = fopen(output, "w"); + + while (fscanf(in, "%[^\n]\n", pfad) == 1) + { + stat(pfad, &st); + filesize = st.st_size; + if (splitgroesse >= filesize) + { + splitgroesse -= filesize; + fprintf(out, "%s\n", pfad); + } + else + { + if (exists(rest) == 1) + re = fopen(rest, "w"); + + fprintf(re, "%s\n", pfad); + } + } + + fclose(in); fclose(out); + if(exists(rest) == 0) + fclose(re); + + humanread = splitgroesse; + while (humanread >= 1024) + { + i++; + humanread /= 1024; + switch (i) + { + case 1: + einheit = 'K'; + break; + case 2: + einheit = 'M'; + break; + case 3: + einheit = 'G'; + break; + } + } + + printf("Restlicher Platz in Bytes(%s): %lld (%lld %c)\n", output, splitgroesse, humanread, einheit); +} + +void usage() +{ + printf("\nUsage: discspan