$(CC) $(CFLAGS) parsegenome.c -o parsegenome
clean:
- rm -vf parsegenome
+ $(RM) parsegenome
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
+#include <stdint.h> /* We save the all the frequencies in a 64 bit int */
+#include <stdio.h> /* We extract/add them using bitshifts */
+#include <stdlib.h> /* When no filepath is specified assume stdin */
#include <string.h>
int main(int argc, char* argv[])
--- /dev/null
+CC=gcc
+CFLAGS=-std=c99 -Wall -Wextra
+
+all: exercise1 exercise2
+
+exercise2: exercise2.c
+ $(CC) $(CFLAGS) -O3 exercise2.c -o exercise2
+
+exercise1: exercise1b.c exercise1d.c
+ $(CC) $(CFLAGS) exercise1b.c -o exercise1b
+ $(CC) $(CFLAGS) exercise1d.c -o exercise1d
+
+clean:
+ $(RM) exercise1b exercise1d exercise2
--- /dev/null
+/dev/random generates random bytes from a 4096 bits entropy pool and will only
+use fresh entropy.
+
+/dev/urandom generates random bytes from a 4096 bits entropy pool too but it
+reuses entropy while the entropy pool is filled. Because of the reuse
+/dev/urandom is much faster then /dev/random
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(void)
+{
+ FILE *f = fopen("/dev/urandom", "r");
+ char c;
+ do {
+ c = fgetc(f);
+ printf("%i %u %x\n", c, c, c);
+ } while(c != 42);
+ fclose(f);
+ return 0;
+}
--- /dev/null
+-82 4294967214 ffffffae
+91 91 5b
+-63 4294967233 ffffffc1
+-41 4294967255 ffffffd7
+-22 4294967274 ffffffea
+103 103 67
+-33 4294967263 ffffffdf
+-115 4294967181 ffffff8d
+-90 4294967206 ffffffa6
+108 108 6c
+60 60 3c
+-42 4294967254 ffffffd6
+-55 4294967241 ffffffc9
+-26 4294967270 ffffffe6
+25 25 19
+42 42 2a
--- /dev/null
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(void)
+{
+ FILE *f = fopen("/dev/urandom", "r");
+ uint16_t c;
+ do {
+ c = fgetc(f)+fgetc(f)*256;
+ printf("%04x\n", c);
+ } while(c != 42);
+ fclose(f);
+ return 0;
+}
--- /dev/null
+271325
+40516
+65532
+23964
+41888
+95550
+234585
+50847
+85879
+87536
--- /dev/null
+{ for ((i=0;i<10;i++)); do ./exercise1d | wc -l; done; } > exercise1d.txt
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+
+void print(char *address, unsigned int size)
+{
+ printf("address: %p, size: %u, psize: %u\n", address, size, sizeof(address));
+ for(unsigned char i=0; i<size; i++)
+ {
+ int value = *((char*)(address+i));
+ printf("%p %x %u\n", address+i, value, value);
+ }
+}
+
+int main(void)
+{
+ short i = 0x1234;
+ char x = -127;
+ long sn1 = 4109503;/*
+ long sn2 = 4202015;
+ int y[2] = {0x11223344, 0x443332211};*/
+ printf("address content (hex) content(dec)\n");
+
+ print((char *)&i, sizeof(i));
+ print((char *)&x, sizeof(x));
+ print((char *)&sn1, sizeof(sn1));
+ return 0;
+}