#include #include #include #include #include #include #include // r file memory typedef struct rfm_t { char path[4096]; void *data; size_t size; long ptr; FILE *f; int fd; } rfm_t; rfm_t rfm; bool _initialized = false; void rfm_destroy(rfm_t *r) { if (munmap(r->data, r->size) == -1) { perror("munmap"); exit(EXIT_FAILURE); } close(rfm.fd); } void *falloc(size_t s) { rfm_t *rr = &rfm; printf("hier\n"); char *data = (char *)rr->data + rfm.ptr; // data+= rfm.ptr; rfm.ptr += s; return data; } void *finit(char *path, size_t size) { printf("HIERR\n"); if (!_initialized) { rfm.ptr = 0; _initialized = true; rfm.size = size; printf("HIERR\n"); memset(&rfm, 0, sizeof(rfm_t)); rfm.size = size; rfm.ptr = 0; printf("HIERR\n"); // rfm.fd = open(path, O_RDWR); // ftruncate(rfm.fd, size); if (path) { printf("HIERR\n"); rfm.path[0] = 0; strcpy(rfm.path, path); // creat(path,F_) rfm.fd = open(path, O_RDWR); printf("OPEN %s\n", path); } if (!path) { rfm.f = tmpfile(); rfm.fd = fileno(rfm.f); } // if (ftruncate(rfm.fd, size) == -1) // { // perror("ftruncate"); // exit(EXIT_FAILURE); // } // rfensurefile(path,1024*1024); rfm.data = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, rfm.fd, 0); printf("HIERR\n"); } /* if (rfm.data == MAP_FAILED) { perror("mmap"); exit(EXIT_FAILURE); } char *data = (char *)rfm.data; printf(data); if (munmap(rfm.data, size) == -1) { perror("munmap"); exit(EXIT_FAILURE); } fclose(rfm.f); */ } int main() { // Step 1: Create a temporary file finit("tast.dat", 1024 * 1024 * 100); printf("gaa\n"); char *data = (char *)falloc(10); strcpy(data, "ab"); char *data2 = (char *)falloc(30); strcpy(data2, "ff\n"); // for(int i = 0; i < 333333; i++) // strcat(data,"ggggggggggggggggg"); printf("%s\n", data); // printf("%s\n",data);; // strcpy(data2,"aaaa"); return 0; }