69,371
社区成员
发帖
与我相关
我的任务
分享
int fd = open("log.txt",O_RDWR|O_CREAT,0666);
//write(fd,&zero,sizeof(int));
int *mmp = (int*)mmap( NULL,sizeof(int),PROT_READ |
PROT_WRITE,MAP_SHARED,fd,0 );
close(fd);
*mmp=0;
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
int main(void)
{
int zero = 100;
int fd = open("log.txt",O_RDWR|O_CREAT,0666);
write(fd, &zero, sizeof(int));
int *mmp = (int *)mmap( NULL,sizeof(int),PROT_READ |
PROT_WRITE,MAP_SHARED,fd,0 );
if (mmp == MAP_FAILED) {
fprintf(stderr, "map error!\n");
goto errno_r;
}
close(fd);
printf("%d\n", *mmp);
*mmp = 0;
printf("%d\n", *mmp);
errno_r:
munmap(mmp, sizeof(int));
return 0;
}
write(fd, &zero, sizeof(int));是需要的,因为若不加这句,fd的偏移不是sizeof(int)个字节;
若不加这句,可以打开/dev/zero文件,即:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
int main(void)
{
int zero = 100;
//int fd = open("log.txt",O_RDWR|O_CREAT,0666);
int fd = open("/dev/zero",O_RDWR|O_CREAT,0666);
//write(fd, &zero, sizeof(int));
int *mmp = (int *)mmap( NULL,sizeof(int),PROT_READ |
PROT_WRITE,MAP_SHARED,fd,0 );
if (mmp == MAP_FAILED) {
fprintf(stderr, "map error!\n");
goto errno_r;
}
close(fd);
printf("%d\n", *mmp);
*mmp = 10;
printf("%d\n", *mmp);
errno_r:
munmap(mmp, sizeof(int));
return 0;
}
另外,建议加上对mmap返回值的判断