diff --git a/infiniband.c b/infiniband.c index f2321dc064599a601177fa88cbdc0924cd203d2c..416be9e246c7d158756bc316ec5720ef47de3b05 100644 --- a/infiniband.c +++ b/infiniband.c @@ -17,14 +17,14 @@ along with Foobar. If not, see <https://www.gnu.org/licenses/>. *******************************************************/ - -#include <stdio.h> #include <stdlib.h> +#include <fcntl.h> +#include <stdio.h> #include <string.h> #include <glob.h> -char **init_infiniband(char* infi_path) { +int *init_infiniband(char* infi_path) { if(infi_path==NULL) return NULL; @@ -42,10 +42,11 @@ char **init_infiniband(char* infi_path) { "%s/port_rcv_data", "%s/port_xmit_packets", "%s/port_xmit_data"}; - char** sources = malloc(sizeof(char*)*4); + int* sources = malloc(sizeof(int)*4); + char buffer[1024]; for(int i=0; i<4; i++) { - sources[i] = malloc(200); - sprintf(sources[i], filenames[i], infi_path); + sprintf(buffer, filenames[i], infi_path); + sources[i] = open(buffer, O_RDONLY); } return sources; diff --git a/infiniband.h b/infiniband.h index 4677d5d836813f7b1d6d6fbb25f4ce7d07b013bc..847ad4c315c31093c694ca15fdca1477f32c821a 100644 --- a/infiniband.h +++ b/infiniband.h @@ -19,4 +19,4 @@ *******************************************************/ -char **init_infiniband(char* infi_path); +int *init_infiniband(char* infi_path); diff --git a/mojitos.c b/mojitos.c index 9d179a5bea04d123f97b1374cadf68e24cb1e09f..d0b175ead0f2324f4e91bbcc48eb08bc344e4dc0 100644 --- a/mojitos.c +++ b/mojitos.c @@ -188,7 +188,7 @@ int main(int argc, char **argv) { // Network initialization - char ** network_sources = NULL; + int *network_sources = NULL; if(dev != NULL) network_sources = init_network(dev); long long network_values[4]={0,0,0,0}; diff --git a/network.c b/network.c index 5bab8620a298b450d41bd5cc2bb188866fd2fc83..c30ae6ae67eca9d5bf01674a04a0dc6a140b9767 100644 --- a/network.c +++ b/network.c @@ -17,53 +17,55 @@ along with Foobar. If not, see <https://www.gnu.org/licenses/>. *******************************************************/ - -#include <stdio.h> +#include <unistd.h> +#include <fcntl.h> #include <stdlib.h> +#include <stdio.h> #include <string.h> -char **init_network(char* dev) { +int *init_network(char* dev) { if(dev==NULL) return NULL; if(strcmp(dev,"X")==0) { - FILE* f = fopen("/proc/net/route", "r"); + int f = open("/proc/net/route", O_RDONLY); char buffer[1000]; - fgets(buffer, 999, f); - fgets(buffer, 999, f); - char *end_of_dev = index(buffer, '\t'); + read(f, buffer, 999); + char *start_of_dev = index(buffer, '\n')+1; + char *end_of_dev = index(start_of_dev, '\t'); *end_of_dev='\0'; - dev = buffer; - fclose(f); + dev = start_of_dev; + close(f); } char *filenames[] = {"/sys/class/net/%s/statistics/rx_packets", "/sys/class/net/%s/statistics/rx_bytes", "/sys/class/net/%s/statistics/tx_packets", "/sys/class/net/%s/statistics/tx_bytes"}; - char** sources = malloc(sizeof(char*)*4); + int* sources = malloc(sizeof(int)*4); + char buffer2[256]; for(int i=0; i<4; i++) { - sources[i] = malloc(200); - sprintf(sources[i], filenames[i], dev); + sprintf(buffer2, filenames[i], dev); + sources[i] = open(buffer2, O_RDONLY); } return sources; } -void get_network(long long* results, char** sources) { +void get_network(long long* results, int *sources) { if(sources==NULL) return; + char buffer[128]; for(int i=0; i<4; i++){ - FILE* f = fopen(sources[i], "rb"); - fscanf(f, "%lld", &results[i]); - fclose(f); + pread(sources[i], buffer, 127, 0); + results[i] = atoll(buffer); } } -void clean_network(char **sources) { +void clean_network(int *sources) { if(sources==NULL) return; for(int i=0;i<4;i++) - free(sources[i]); + close(sources[i]); free(sources); } diff --git a/network.h b/network.h index cd78a709fc1b9097fb480474bed33ac5ef06b79c..2f2eea3ef9733e76bda40d871580b0de33334589 100644 --- a/network.h +++ b/network.h @@ -18,6 +18,6 @@ *******************************************************/ -char **init_network(char* dev); -void get_network(long long* results, char** sources); -void clean_network(char **sources); +int *init_network(char* dev); +void get_network(long long* results, int * sources); +void clean_network(int *sources);