E' sbagliato aprire un file contemporaneamente in sola scrittura e sola lettura, oltre che insensato (cosa che tu fai specificando come flags "O_RDONLY | O_WRONLY", nella open()). Se intendevi aprire il file sia in scrittura che in lettura, il flag da usare è O_RDWR.