Tenho o seguinte código C que grava em um arquivo tanto do processo pai quanto do filho após um fork()
. No entanto, a saída em testfile.txt
às vezes é corrompida ou está em uma ordem inesperada.
Estou anexando o código:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main() {
int fd = open("testfile.txt", O_WRONLY | O_CREAT, 0644);
if (fd == -1) {
perror("open");
return 1;
}
if (fork() == 0) {
// Child process
write(fd, "Child\n", 6);
close(fd);
} else {
// Parent process
write(fd, "Parent\n", 7);
close(fd);
}
return 0;
}
Emitir :
- O arquivo às vezes contém
"Child\nParent\n"
e outras vezes"Parent\nChild\n"
- Em alguns casos, a saída é corrompida ou misturada
- Eu esperava que cada processo fosse escrito separadamente, mas eles parecem interferir um no outro
Pergunta:
- Por que isso está acontecendo?
- Como posso garantir gravações corretas e separadas de cada processo?