From 6ff784158f61a082fe6d4332c743a066ef007674 Mon Sep 17 00:00:00 2001 From: RossTheRoss Date: Thu, 22 Oct 2020 07:50:12 -0500 Subject: Add Project 2 Files --- P2/lib/utils.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 P2/lib/utils.c (limited to 'P2/lib') diff --git a/P2/lib/utils.c b/P2/lib/utils.c new file mode 100644 index 0000000..79b309e --- /dev/null +++ b/P2/lib/utils.c @@ -0,0 +1,92 @@ +#include "utils.h" + +char *getChunkData(int mapperID) { +} + +// sends chunks of size 1024 to the mappers in RR fashion +void sendChunkData(char *inputFile, int nMappers) { +} + +// hash function to divide the list of word.txt files across reducers +//http://www.cse.yorku.ca/~oz/hash.html +int hashFunction(char* key, int reducers){ + unsigned long hash = 0; + int c; + + while ((c = *key++)!='\0') + hash = c + (hash << 6) + (hash << 16) - hash; + + return (hash % reducers); +} + +int getInterData(char *key, int reducerID) { +} + +void shuffle(int nMappers, int nReducers) { +} + +// check if the character is valid for a word +int validChar(char c){ + return ((tolower(c) >= 'a') && tolower(c <='z')) || + (c >= '0' && c <= '9'); +} + +char *getWord(char *chunk, int *i){ + char *buffer = (char *)malloc(sizeof(char) * chunkSize); + memset(buffer, '\0', chunkSize); + int j = 0; + while((*i) < strlen(chunk)) { + // read a single word at a time from chunk + // printf("%d\n", i); + if (chunk[(*i)] == '\n' || chunk[(*i)] == ' ' || !validChar(chunk[(*i)]) || chunk[(*i)] == 0x0) { + buffer[j] = '\0'; + if(strlen(buffer) > 0){ + (*i)++; + return buffer; + } + j = 0; + (*i)++; + continue; + } + buffer[j] = chunk[(*i)]; + j++; + (*i)++; + } + if(strlen(buffer) > 0) + return buffer; + return NULL; +} + +void createOutputDir(){ + mkdir("output", ACCESSPERMS); + mkdir("output/MapOut", ACCESSPERMS); + mkdir("output/ReduceOut", ACCESSPERMS); +} + +char *createMapDir(int mapperID){ + char *dirName = (char *) malloc(sizeof(char) * 100); + memset(dirName, '\0', 100); + sprintf(dirName, "output/MapOut/Map_%d", mapperID); + mkdir(dirName, ACCESSPERMS); + return dirName; +} + +void removeOutputDir(){ + pid_t pid = fork(); + if(pid == 0){ + char *argv[] = {"rm", "-rf", "output", NULL}; + if (execvp(*argv, argv) < 0) { + printf("ERROR: exec failed\n"); + exit(1); + } + exit(0); + } else{ + wait(NULL); + } +} + +void bookeepingCode(){ + removeOutputDir(); + sleep(1); + createOutputDir(); +} \ No newline at end of file -- cgit v1.2.3