Ich versuche, diesen Code zu laufen, während ich bin mit Endung - Wert: 1 Wert: 0.000000Was ist falsch mit diesem Code des Lesens mit mmap?
Meine Frage ist, warum die beiden Ergebnisse unterschiedlich sind ??
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <string.h>
#include <unistd.h>
int main()
{
int fd;
struct stat mystat;
void *pmap;
int i,integer;
double *values;
int32_t *mapped_baseA;
int32_t fdA;
fd = open("test.txt",O_RDWR); // a text file containing- 1 2 3 4 5
if(fd==-1)
{
perror("open");
exit(1);
}
if(fstat(fd,&mystat)<0)
{
perror("fstat");
close(fd);
exit(1);
}
pmap = mmap(0,mystat.st_size,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);
if(pmap==MAP_FAILED)
{
perror("mmap failed");
close(fd);
exit(1);
}
//strncpy(pmap,"That is my name",15);
sscanf (pmap, " %d", &integer);
printf("value: %d \n", integer);
// Drucken der Werte nach dem Scannen aus Zeichenfolge.
values = (double *) mmap(0,mystat.st_size,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);
printf("value: %lf \n", values[1]);
// Drucken der Werte von den Zeiger munmap (PMAP, mystat.st_size);
close(fd);
return 0;
}
'eine Textdatei, die 1 2 3 4 5 enthält, wird nicht automatisch verdoppelt, wenn mmap() Ed. Es wird für das Programm als (großes) Char-Array auftreten. UND: Sie sollten darauf achten, die Größe bis zu einer Seitenlänge zu runden. (und ignorierte den aufgerundeten Teil) – wildplasser