I had a problem writing a structure to a file with mapped memory.
I have two files: mmap.write.c and mmap.read.c, and in these files I write an integer to the file and read it from the file.
When I want to write a struct and read it, I could not think about it, because in line 32 mmap.write.c
sprintf((char*) file_memory, "%d\n", i);
and in line 25 mmap.read.c
sscanf (file_memory, "%d", &integer);
There is no difference in writing and reading integer / double / float / char, etc., since I can put the pattern as the second argument "% d" for the integer. But what will I write here to indicate the structure? This is my main problem.
The structure I want to write and read is:
#define CHANNELS 20 typedef dataholder struct { int value[CHANNELS]; time_t time; int hash; }dataholder;
mmap.read.c
#include <stdlib.h> #include <stdio.h> #include <fcntl.h> #include <sys/mman.h> #include <sys/stat.h> #include <unistd.h> #include "mmap.h" #define FILE_LENGTH 0x10000 int main (int argc, char* const argv[]) { int fd; void* file_memory; int integer; /* Open the file. */ fd = open (argv[1], O_RDWR, S_IRUSR | S_IWUSR); printf("file opened\n"); /* Create the memory mapping. */ file_memory = mmap (0, FILE_LENGTH, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); printf("memfile opened\n"); close (fd); printf("file closed\n"); /* Read the integer, print it out, and double it. */ while(1) { sscanf (file_memory, "%d", &integer); printf ("value: %d\n", integer); usleep(100000); } //sprintf ((char*) file_memory, "%d\n", 2 * integer); /* Release the memory (unnecessary because the program exits). */ munmap (file_memory, FILE_LENGTH); return 0; }
mmap.write.c
#include <stdlib.h>
Thank you very much in advance.