#include #include #include #include /*Structure for storing words received from each thread*/ struct return_val{ char wordlist[100][100]; int count[100]; } *arr; pthread_t *threads; int lines; /*Aggregates Frequency Sum of different threads*/ int aggregate(char *a) { int sum = 0; int i=0; while(1) { if(i==lines) break; int count = 0; while(1) { if(arr[i].count[count] == -1) { break; } if(strcmp(a,arr[i].wordlist[count]) == 0) { sum += arr[i].count[count]; arr[i].count[count] = 0; } count++;
} i++; } return sum; } /*Function executed by each thread on separate line*/ void *word_count(void* num) { int *ln = num; unsigned int line_number = *ln; line_number++; char cmd_p1[9] = "sed -n '0"; char cmd_p2[2]; sprintf(cmd_p2,"%d",line_number); char cmd_p3[14] = "p' 'file.txt'0"; char command[100]; command[0] = '0'; strcat(command,cmd_p1); strcat(command,cmd_p2); strcat(command,cmd_p3); //usleep(line_number); char cmd[100] = " | tr [:space:] ' ' | grep -v '^s*$' | sort | uniq -c | sort0"; strcat(command,cmd); FILE *in; in= popen(command, "r"); rewind(in); char buff[50]; int counter = 0; while(fgets(buff,sizeof(buff),in))
{ char c=' '; int i = 0; int cnt = atoi(buff); arr[line_number-1].count[counter] = cnt; while(c!='0') { c=buff[i]; buff[i]=buff[i+6]; i++; } int cnnt = 0; while(c!=' ') { c = buff[cnnt]; cnnt++; } i=0; while(c!='0') { c=buff[i]; buff[i]=buff[i+cnnt]; i++; } sprintf(arr[line_number-1].wordlist[counter],"%s",buff); counter++; } arr[line_number-1].count[counter] = -1; fclose(in); return NULL;
} int main(void) { FILE *fp; fp = fopen("file.txt","r"); char a[200]; lines = 0; void *status = NULL; while(fgets(a,sizeof(a),fp) !=NULL) { lines++; } fclose(fp); arr = (struct return_val*) calloc(lines, sizeof(struct return_val) * lines); threads = malloc(sizeof(pthread_t)*lines); int i; for(i=0;i= 0) { if(arr[i].count[ctr] > 0) { strcpy(final[final_ctr],arr[i].wordlist[ctr]); final_cnt[final_ctr] = arr[i].count[ctr]; arr[i].count[ctr] = 0; int sum = aggregate(arr[i].wordlist[ctr]); final_cnt[final_ctr] += sum; printf("%d %s",final_cnt[final_ctr],final[final_ctr]); } ctr++; final_ctr++; }
i++; if(i==lines) { break; } } free(arr); return 0; } #include #include #include #include /*Structure for storing words received from each thread*/ struct return_val{ char wordlist[100][100]; int count[100]; } *arr; pthread_t *threads; int lines; /*Aggregates Frequency Sum of different threads*/ int aggregate(char *a) { int sum = 0; int i=0; while(1) { if(i==lines) break; int count = 0; while(1) { if(arr[i].count[count] == -1) { break; }
if(strcmp(a,arr[i].wordlist[count]) == 0) { sum += arr[i].count[count]; arr[i].count[count] = 0; } count++; } i++; } return sum; } /*Function executed by each thread on separate line*/ void *word_count(void* num) { int *ln = num; unsigned int line_number = *ln; line_number++; char cmd_p1[9] = "sed -n '0"; char cmd_p2[2]; sprintf(cmd_p2,"%d",line_number); char cmd_p3[14] = "p' 'file.txt'0"; char command[100]; command[0] = '0'; strcat(command,cmd_p1); strcat(command,cmd_p2); strcat(command,cmd_p3); //usleep(line_number);
char cmd[100] = " | tr [:space:] ' ' | grep -v '^s*$' | sort | uniq -c | sort0"; strcat(command,cmd); FILE *in; in= popen(command, "r"); rewind(in); char buff[50]; int counter = 0; while(fgets(buff,sizeof(buff),in)) { char c=' '; int i = 0; int cnt = atoi(buff); arr[line_number-1].count[counter] = cnt; while(c!='0') { c=buff[i]; buff[i]=buff[i+6]; i++; } int cnnt = 0; while(c!=' ') { c = buff[cnnt]; cnnt++; } i=0; while(c!='0') { c=buff[i]; buff[i]=buff[i+cnnt]; i++; }
sprintf(arr[line_number-1].wordlist[counter],"%s",buff); counter++; } arr[line_number-1].count[counter] = -1; fclose(in); return NULL; } int main(void) { FILE *fp; fp = fopen("file.txt","r"); char a[200]; lines = 0; void *status = NULL; while(fgets(a,sizeof(a),fp) !=NULL) { lines++; } fclose(fp); arr = (struct return_val*) calloc(lines, sizeof(struct return_val) * lines); threads = malloc(sizeof(pthread_t)*lines); int i; for(i=0;i= 0) { if(arr[i].count[ctr] > 0) { strcpy(final[final_ctr],arr[i].wordlist[ctr]); final_cnt[final_ctr] = arr[i].count[ctr];
arr[i].count[ctr] = 0; int sum = aggregate(arr[i].wordlist[ctr]); final_cnt[final_ctr] += sum; printf("%d %s",final_cnt[final_ctr],final[final_ctr]); } ctr++; final_ctr++; } i++; if(i==lines) { break; } } free(arr); return 0; } Solution #include #include #include #include /*Structure for storing words received from each thread*/ struct return_val{ char wordlist[100][100]; int count[100]; } *arr; pthread_t *threads; int lines; /*Aggregates Frequency Sum of different threads*/ int aggregate(char *a) {
int sum = 0; int i=0; while(1) { if(i==lines) break; int count = 0; while(1) { if(arr[i].count[count] == -1) { break; } if(strcmp(a,arr[i].wordlist[count]) == 0) { sum += arr[i].count[count]; arr[i].count[count] = 0; } count++; } i++; } return sum; } /*Function executed by each thread on separate line*/ void *word_count(void* num) { int *ln = num; unsigned int line_number = *ln;
line_number++; char cmd_p1[9] = "sed -n '0"; char cmd_p2[2]; sprintf(cmd_p2,"%d",line_number); char cmd_p3[14] = "p' 'file.txt'0"; char command[100]; command[0] = '0'; strcat(command,cmd_p1); strcat(command,cmd_p2); strcat(command,cmd_p3); //usleep(line_number); char cmd[100] = " | tr [:space:] ' ' | grep -v '^s*$' | sort | uniq -c | sort0"; strcat(command,cmd); FILE *in; in= popen(command, "r"); rewind(in); char buff[50]; int counter = 0; while(fgets(buff,sizeof(buff),in)) { char c=' '; int i = 0; int cnt = atoi(buff); arr[line_number-1].count[counter] = cnt; while(c!='0') { c=buff[i]; buff[i]=buff[i+6]; i++; } int cnnt = 0;
while(c!=' ') { c = buff[cnnt]; cnnt++; } i=0; while(c!='0') { c=buff[i]; buff[i]=buff[i+cnnt]; i++; } sprintf(arr[line_number-1].wordlist[counter],"%s",buff); counter++; } arr[line_number-1].count[counter] = -1; fclose(in); return NULL; } int main(void) { FILE *fp; fp = fopen("file.txt","r"); char a[200]; lines = 0; void *status = NULL; while(fgets(a,sizeof(a),fp) !=NULL) { lines++; }
fclose(fp); arr = (struct return_val*) calloc(lines, sizeof(struct return_val) * lines); threads = malloc(sizeof(pthread_t)*lines); int i; for(i=0;i= 0) { if(arr[i].count[ctr] > 0) { strcpy(final[final_ctr],arr[i].wordlist[ctr]); final_cnt[final_ctr] = arr[i].count[ctr]; arr[i].count[ctr] = 0; int sum = aggregate(arr[i].wordlist[ctr]); final_cnt[final_ctr] += sum; printf("%d %s",final_cnt[final_ctr],final[final_ctr]); } ctr++; final_ctr++; } i++; if(i==lines) { break; } } free(arr); return 0; } #include #include #include #include /*Structure for storing words received from each thread*/
struct return_val{ char wordlist[100][100]; int count[100]; } *arr; pthread_t *threads; int lines; /*Aggregates Frequency Sum of different threads*/ int aggregate(char *a) { int sum = 0; int i=0; while(1) { if(i==lines) break; int count = 0; while(1) { if(arr[i].count[count] == -1) { break; } if(strcmp(a,arr[i].wordlist[count]) == 0) { sum += arr[i].count[count]; arr[i].count[count] = 0; } count++; } i++; }
return sum; } /*Function executed by each thread on separate line*/ void *word_count(void* num) { int *ln = num; unsigned int line_number = *ln; line_number++; char cmd_p1[9] = "sed -n '0"; char cmd_p2[2]; sprintf(cmd_p2,"%d",line_number); char cmd_p3[14] = "p' 'file.txt'0"; char command[100]; command[0] = '0'; strcat(command,cmd_p1); strcat(command,cmd_p2); strcat(command,cmd_p3); //usleep(line_number); char cmd[100] = " | tr [:space:] ' ' | grep -v '^s*$' | sort | uniq -c | sort0"; strcat(command,cmd); FILE *in; in= popen(command, "r"); rewind(in); char buff[50]; int counter = 0; while(fgets(buff,sizeof(buff),in)) { char c=' '; int i = 0; int cnt = atoi(buff); arr[line_number-1].count[counter] = cnt;
while(c!='0') { c=buff[i]; buff[i]=buff[i+6]; i++; } int cnnt = 0; while(c!=' ') { c = buff[cnnt]; cnnt++; } i=0; while(c!='0') { c=buff[i]; buff[i]=buff[i+cnnt]; i++; } sprintf(arr[line_number-1].wordlist[counter],"%s",buff); counter++; } arr[line_number-1].count[counter] = -1; fclose(in); return NULL; } int main(void) { FILE *fp; fp = fopen("file.txt","r");
char a[200]; lines = 0; void *status = NULL; while(fgets(a,sizeof(a),fp) !=NULL) { lines++; } fclose(fp); arr = (struct return_val*) calloc(lines, sizeof(struct return_val) * lines); threads = malloc(sizeof(pthread_t)*lines); int i; for(i=0;i= 0) { if(arr[i].count[ctr] > 0) { strcpy(final[final_ctr],arr[i].wordlist[ctr]); final_cnt[final_ctr] = arr[i].count[ctr]; arr[i].count[ctr] = 0; int sum = aggregate(arr[i].wordlist[ctr]); final_cnt[final_ctr] += sum; printf("%d %s",final_cnt[final_ctr],final[final_ctr]); } ctr++; final_ctr++; } i++; if(i==lines) { break; } }
free(arr); return 0; }

#include stdio.h#include stdlib.h#include string.h#inclu.pdf

  • 1.
    #include #include #include #include /*Structure for storingwords received from each thread*/ struct return_val{ char wordlist[100][100]; int count[100]; } *arr; pthread_t *threads; int lines; /*Aggregates Frequency Sum of different threads*/ int aggregate(char *a) { int sum = 0; int i=0; while(1) { if(i==lines) break; int count = 0; while(1) { if(arr[i].count[count] == -1) { break; } if(strcmp(a,arr[i].wordlist[count]) == 0) { sum += arr[i].count[count]; arr[i].count[count] = 0; } count++;
  • 2.
    } i++; } return sum; } /*Function executedby each thread on separate line*/ void *word_count(void* num) { int *ln = num; unsigned int line_number = *ln; line_number++; char cmd_p1[9] = "sed -n '0"; char cmd_p2[2]; sprintf(cmd_p2,"%d",line_number); char cmd_p3[14] = "p' 'file.txt'0"; char command[100]; command[0] = '0'; strcat(command,cmd_p1); strcat(command,cmd_p2); strcat(command,cmd_p3); //usleep(line_number); char cmd[100] = " | tr [:space:] ' ' | grep -v '^s*$' | sort | uniq -c | sort0"; strcat(command,cmd); FILE *in; in= popen(command, "r"); rewind(in); char buff[50]; int counter = 0; while(fgets(buff,sizeof(buff),in))
  • 3.
    { char c=' '; inti = 0; int cnt = atoi(buff); arr[line_number-1].count[counter] = cnt; while(c!='0') { c=buff[i]; buff[i]=buff[i+6]; i++; } int cnnt = 0; while(c!=' ') { c = buff[cnnt]; cnnt++; } i=0; while(c!='0') { c=buff[i]; buff[i]=buff[i+cnnt]; i++; } sprintf(arr[line_number-1].wordlist[counter],"%s",buff); counter++; } arr[line_number-1].count[counter] = -1; fclose(in); return NULL;
  • 4.
    } int main(void) { FILE *fp; fp= fopen("file.txt","r"); char a[200]; lines = 0; void *status = NULL; while(fgets(a,sizeof(a),fp) !=NULL) { lines++; } fclose(fp); arr = (struct return_val*) calloc(lines, sizeof(struct return_val) * lines); threads = malloc(sizeof(pthread_t)*lines); int i; for(i=0;i= 0) { if(arr[i].count[ctr] > 0) { strcpy(final[final_ctr],arr[i].wordlist[ctr]); final_cnt[final_ctr] = arr[i].count[ctr]; arr[i].count[ctr] = 0; int sum = aggregate(arr[i].wordlist[ctr]); final_cnt[final_ctr] += sum; printf("%d %s",final_cnt[final_ctr],final[final_ctr]); } ctr++; final_ctr++; }
  • 5.
    i++; if(i==lines) { break; } } free(arr); return 0; } #include #include #include #include /*Structure forstoring words received from each thread*/ struct return_val{ char wordlist[100][100]; int count[100]; } *arr; pthread_t *threads; int lines; /*Aggregates Frequency Sum of different threads*/ int aggregate(char *a) { int sum = 0; int i=0; while(1) { if(i==lines) break; int count = 0; while(1) { if(arr[i].count[count] == -1) { break; }
  • 6.
    if(strcmp(a,arr[i].wordlist[count]) == 0) { sum+= arr[i].count[count]; arr[i].count[count] = 0; } count++; } i++; } return sum; } /*Function executed by each thread on separate line*/ void *word_count(void* num) { int *ln = num; unsigned int line_number = *ln; line_number++; char cmd_p1[9] = "sed -n '0"; char cmd_p2[2]; sprintf(cmd_p2,"%d",line_number); char cmd_p3[14] = "p' 'file.txt'0"; char command[100]; command[0] = '0'; strcat(command,cmd_p1); strcat(command,cmd_p2); strcat(command,cmd_p3); //usleep(line_number);
  • 7.
    char cmd[100] =" | tr [:space:] ' ' | grep -v '^s*$' | sort | uniq -c | sort0"; strcat(command,cmd); FILE *in; in= popen(command, "r"); rewind(in); char buff[50]; int counter = 0; while(fgets(buff,sizeof(buff),in)) { char c=' '; int i = 0; int cnt = atoi(buff); arr[line_number-1].count[counter] = cnt; while(c!='0') { c=buff[i]; buff[i]=buff[i+6]; i++; } int cnnt = 0; while(c!=' ') { c = buff[cnnt]; cnnt++; } i=0; while(c!='0') { c=buff[i]; buff[i]=buff[i+cnnt]; i++; }
  • 8.
    sprintf(arr[line_number-1].wordlist[counter],"%s",buff); counter++; } arr[line_number-1].count[counter] = -1; fclose(in); returnNULL; } int main(void) { FILE *fp; fp = fopen("file.txt","r"); char a[200]; lines = 0; void *status = NULL; while(fgets(a,sizeof(a),fp) !=NULL) { lines++; } fclose(fp); arr = (struct return_val*) calloc(lines, sizeof(struct return_val) * lines); threads = malloc(sizeof(pthread_t)*lines); int i; for(i=0;i= 0) { if(arr[i].count[ctr] > 0) { strcpy(final[final_ctr],arr[i].wordlist[ctr]); final_cnt[final_ctr] = arr[i].count[ctr];
  • 9.
    arr[i].count[ctr] = 0; intsum = aggregate(arr[i].wordlist[ctr]); final_cnt[final_ctr] += sum; printf("%d %s",final_cnt[final_ctr],final[final_ctr]); } ctr++; final_ctr++; } i++; if(i==lines) { break; } } free(arr); return 0; } Solution #include #include #include #include /*Structure for storing words received from each thread*/ struct return_val{ char wordlist[100][100]; int count[100]; } *arr; pthread_t *threads; int lines; /*Aggregates Frequency Sum of different threads*/ int aggregate(char *a) {
  • 10.
    int sum =0; int i=0; while(1) { if(i==lines) break; int count = 0; while(1) { if(arr[i].count[count] == -1) { break; } if(strcmp(a,arr[i].wordlist[count]) == 0) { sum += arr[i].count[count]; arr[i].count[count] = 0; } count++; } i++; } return sum; } /*Function executed by each thread on separate line*/ void *word_count(void* num) { int *ln = num; unsigned int line_number = *ln;
  • 11.
    line_number++; char cmd_p1[9] ="sed -n '0"; char cmd_p2[2]; sprintf(cmd_p2,"%d",line_number); char cmd_p3[14] = "p' 'file.txt'0"; char command[100]; command[0] = '0'; strcat(command,cmd_p1); strcat(command,cmd_p2); strcat(command,cmd_p3); //usleep(line_number); char cmd[100] = " | tr [:space:] ' ' | grep -v '^s*$' | sort | uniq -c | sort0"; strcat(command,cmd); FILE *in; in= popen(command, "r"); rewind(in); char buff[50]; int counter = 0; while(fgets(buff,sizeof(buff),in)) { char c=' '; int i = 0; int cnt = atoi(buff); arr[line_number-1].count[counter] = cnt; while(c!='0') { c=buff[i]; buff[i]=buff[i+6]; i++; } int cnnt = 0;
  • 12.
    while(c!=' ') { c =buff[cnnt]; cnnt++; } i=0; while(c!='0') { c=buff[i]; buff[i]=buff[i+cnnt]; i++; } sprintf(arr[line_number-1].wordlist[counter],"%s",buff); counter++; } arr[line_number-1].count[counter] = -1; fclose(in); return NULL; } int main(void) { FILE *fp; fp = fopen("file.txt","r"); char a[200]; lines = 0; void *status = NULL; while(fgets(a,sizeof(a),fp) !=NULL) { lines++; }
  • 13.
    fclose(fp); arr = (structreturn_val*) calloc(lines, sizeof(struct return_val) * lines); threads = malloc(sizeof(pthread_t)*lines); int i; for(i=0;i= 0) { if(arr[i].count[ctr] > 0) { strcpy(final[final_ctr],arr[i].wordlist[ctr]); final_cnt[final_ctr] = arr[i].count[ctr]; arr[i].count[ctr] = 0; int sum = aggregate(arr[i].wordlist[ctr]); final_cnt[final_ctr] += sum; printf("%d %s",final_cnt[final_ctr],final[final_ctr]); } ctr++; final_ctr++; } i++; if(i==lines) { break; } } free(arr); return 0; } #include #include #include #include /*Structure for storing words received from each thread*/
  • 14.
    struct return_val{ char wordlist[100][100]; intcount[100]; } *arr; pthread_t *threads; int lines; /*Aggregates Frequency Sum of different threads*/ int aggregate(char *a) { int sum = 0; int i=0; while(1) { if(i==lines) break; int count = 0; while(1) { if(arr[i].count[count] == -1) { break; } if(strcmp(a,arr[i].wordlist[count]) == 0) { sum += arr[i].count[count]; arr[i].count[count] = 0; } count++; } i++; }
  • 15.
    return sum; } /*Function executedby each thread on separate line*/ void *word_count(void* num) { int *ln = num; unsigned int line_number = *ln; line_number++; char cmd_p1[9] = "sed -n '0"; char cmd_p2[2]; sprintf(cmd_p2,"%d",line_number); char cmd_p3[14] = "p' 'file.txt'0"; char command[100]; command[0] = '0'; strcat(command,cmd_p1); strcat(command,cmd_p2); strcat(command,cmd_p3); //usleep(line_number); char cmd[100] = " | tr [:space:] ' ' | grep -v '^s*$' | sort | uniq -c | sort0"; strcat(command,cmd); FILE *in; in= popen(command, "r"); rewind(in); char buff[50]; int counter = 0; while(fgets(buff,sizeof(buff),in)) { char c=' '; int i = 0; int cnt = atoi(buff); arr[line_number-1].count[counter] = cnt;
  • 16.
    while(c!='0') { c=buff[i]; buff[i]=buff[i+6]; i++; } int cnnt =0; while(c!=' ') { c = buff[cnnt]; cnnt++; } i=0; while(c!='0') { c=buff[i]; buff[i]=buff[i+cnnt]; i++; } sprintf(arr[line_number-1].wordlist[counter],"%s",buff); counter++; } arr[line_number-1].count[counter] = -1; fclose(in); return NULL; } int main(void) { FILE *fp; fp = fopen("file.txt","r");
  • 17.
    char a[200]; lines =0; void *status = NULL; while(fgets(a,sizeof(a),fp) !=NULL) { lines++; } fclose(fp); arr = (struct return_val*) calloc(lines, sizeof(struct return_val) * lines); threads = malloc(sizeof(pthread_t)*lines); int i; for(i=0;i= 0) { if(arr[i].count[ctr] > 0) { strcpy(final[final_ctr],arr[i].wordlist[ctr]); final_cnt[final_ctr] = arr[i].count[ctr]; arr[i].count[ctr] = 0; int sum = aggregate(arr[i].wordlist[ctr]); final_cnt[final_ctr] += sum; printf("%d %s",final_cnt[final_ctr],final[final_ctr]); } ctr++; final_ctr++; } i++; if(i==lines) { break; } }
  • 18.