mmap 函数 应用实例
时间:2010-10-15 来源:aaron_xueli
实例一:
代码如下:
#include <sys/mman.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(void)
{
int fd, ret, fsize;
char *ptr;
struct stat buf;
fd = open("/etc/passwd", O_RDONLY);
if (fd == -1) {
perror("open");
exit(1);
}
fstat(fd, &buf);
fsize = buf.st_size;
ptr = mmap(NULL, fsize+1, PROT_READ | PROT_WRITE,
MAP_PRIVATE, fd, 0);
if (((void *)(-1)) == ptr) {
perror("mmap");
close(fd);
exit(1);
}
ptr[fsize] = '\0';
printf("%s", ptr);
munmap(ptr, fsize);
close(fd);
exit(0);
}
实例二
代码如下:
#include <sys/mman.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
int main(void)
{
char *ptr;
pid_t pid;
ptr = (char *)mmap(NULL, 32, PROT_READ |
PROT_WRITE, MAP_PRIVATE |
MAP_SHARED, -1, 0);
if (((void *)(-1)) == ptr) {
perror("mmap");
exit(1);
}
pid = fork();
if (pid == -1) {
perror("fork");
munmap(ptr, 32);
exit(1);
}
if (pid == 0) {
strcpy(ptr, "Hello world!");
munmap(ptr, 32);
exit(0);
}
wait(NULL);
printf("%s\n", ptr);
munmap(ptr, 32);
exit(0);
}
代码如下:
#include <sys/mman.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(void)
{
int fd, ret, fsize;
char *ptr;
struct stat buf;
fd = open("/etc/passwd", O_RDONLY);
if (fd == -1) {
perror("open");
exit(1);
}
fstat(fd, &buf);
fsize = buf.st_size;
ptr = mmap(NULL, fsize+1, PROT_READ | PROT_WRITE,
MAP_PRIVATE, fd, 0);
if (((void *)(-1)) == ptr) {
perror("mmap");
close(fd);
exit(1);
}
ptr[fsize] = '\0';
printf("%s", ptr);
munmap(ptr, fsize);
close(fd);
exit(0);
}
实例二
代码如下:
#include <sys/mman.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
int main(void)
{
char *ptr;
pid_t pid;
ptr = (char *)mmap(NULL, 32, PROT_READ |
PROT_WRITE, MAP_PRIVATE |
MAP_SHARED, -1, 0);
if (((void *)(-1)) == ptr) {
perror("mmap");
exit(1);
}
pid = fork();
if (pid == -1) {
perror("fork");
munmap(ptr, 32);
exit(1);
}
if (pid == 0) {
strcpy(ptr, "Hello world!");
munmap(ptr, 32);
exit(0);
}
wait(NULL);
printf("%s\n", ptr);
munmap(ptr, 32);
exit(0);
}
相关阅读 更多 +