M
Hallo Fedaykin
der nachfolgende Code macht genau das, was du willst.
Deine Vermutung war genau richtig. Du musst die Größe
der neuen Datei noch setzen, bevor du in diese dann
reinschreibst.
Gruss mcr
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <fcntl.h>
#include <string.h>
static size_t fsize(const char *const name)
{
struct stat stbuf;
if(stat(name, &stbuf) == -1)
return -1;
return stbuf.st_size;
}
int main(void) {
int fdread = open("data.txt", O_RDWR);
int fdwrite = open("data.txt.new", O_RDWR|O_CREAT,0660);
size_t size = fsize("data.txt");
void *fpread = mmap(NULL, size, PROT_READ, MAP_SHARED, fdread, 0);
void *fpwrite = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, fdwrite, 0);
/* Größe der neuen Daten setzen */
lseek(fdwrite, size-1, SEEK_SET);
write(fdwrite, "", 1);
close(fdread);
close(fdwrite);
memcpy(fpwrite, fpread, size);
munmap(fpread, size);
munmap(fpwrite, size);
return 0;
}