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);