81 lines
1.6 KiB
C
81 lines
1.6 KiB
C
#include <stdio.h>
|
|
#include <malloc.h>
|
|
|
|
char *get_text_file(int argc, char **argv) {
|
|
if (argc == 1)
|
|
return "data/text.txt";
|
|
else
|
|
return argv[1];
|
|
}
|
|
|
|
void print_array(int *array, int length) {
|
|
if (length == 0) {
|
|
printf("\n");
|
|
return;
|
|
}
|
|
|
|
printf("|");
|
|
|
|
for (int i = 0; i < length; ++i) {
|
|
printf("%d|", array[i]);
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
void apply_shift(int shift, int *array, int size) {
|
|
for (int i = 0; i < size; ++i) {
|
|
array[i] += shift;
|
|
}
|
|
}
|
|
|
|
int sum_array(int *array, int size) {
|
|
int sum = 0;
|
|
for (int i = 0; i < size; ++i) {
|
|
sum += array[i];
|
|
}
|
|
|
|
return sum;
|
|
}
|
|
|
|
char *read_file(char *filepath, int *len) {
|
|
FILE *f = fopen(filepath, "r");
|
|
|
|
fseek(f, 0, SEEK_END);
|
|
*len = ftell(f);
|
|
fseek(f, 0, SEEK_SET);
|
|
|
|
char *content = (char *) malloc(sizeof(char) * (*len));
|
|
fread(content, 1, *len, f);
|
|
*len = *len - 1;
|
|
content[*len] = '\0';
|
|
|
|
fclose(f);
|
|
|
|
return content;
|
|
}
|
|
|
|
char *read_file_portion(char *filepath, int size, int rank, int *portion_len, int *remain) {
|
|
FILE *f = fopen(filepath, "r");
|
|
fseek(f, 0, SEEK_END);
|
|
int total_len = ftell(f) - 1;
|
|
|
|
int len = total_len / size;
|
|
|
|
int start_point = rank * len;
|
|
int end_point = start_point + len;
|
|
|
|
if (rank + 1 == size)
|
|
*remain = total_len % size;
|
|
end_point += *remain;
|
|
|
|
*portion_len = end_point - start_point;
|
|
char *content = (char *) malloc(sizeof(char) * (*portion_len));
|
|
|
|
fseek(f, start_point, SEEK_SET);
|
|
fread(content, 1, *portion_len, f);
|
|
fclose(f);
|
|
|
|
content[*portion_len] = '\0';
|
|
|
|
return content;
|
|
} |