Obter o comportamento de cópia em gravação de fork (), sem fork ()

Eu tenho um buffer grande:

char *buf = malloc(1000000000); // 1GB

Se eu bifurcasse um novo processo, ele teria um buffer que compartilhava a memória com o pai até que um ou outro escrevesse para ele. Mesmo assim, apenas um novo bloco 4KiB precisaria ser alocado pelo kernel, o restante continuaria a ser compartilhado.

Eu gostaria de fazer uma cópia do buf, mas só vou alterar um pouco da cópia. Eu gostaria de copiar-em-escrever sem bifurcação. (Como você ganha de graça quando se bifurca.)

Isso é possível?

questionAnswers(1)

yourAnswerToTheQuestion